· 7 years ago · Sep 09, 2018, 11:38 PM
1 public PlVers:__version =
2{
3 version = 5,
4 filevers = "1.8.0-manual",
5 date = "03/16/2018",
6 time = "22:47:29"
7};
8new Float:NULL_VECTOR[3];
9new String:NULL_STRING[4];
10public Extension:__ext_core =
11{
12 name = "Core",
13 file = "core",
14 autoload = 0,
15 required = 0,
16};
17new MaxClients;
18public Extension:__ext_sdktools =
19{
20 name = "SDKTools",
21 file = "sdktools.ext",
22 autoload = 1,
23 required = 1,
24};
25new Database:hDatabase;
26new g_iPoints[66];
27new g_iItems[66][1000];
28new g_iEquipped[66][1000];
29new TFHoliday:TFHoliday_Birthday;
30new TFHoliday:TFHoliday_Halloween;
31new TFHoliday:TFHoliday_Christmas;
32new TFHoliday:TFHoliday_EndOfTheLine;
33new TFHoliday:TFHoliday_CommunityUpdate;
34new TFHoliday:TFHoliday_ValentinesDay;
35new TFHoliday:TFHoliday_MeetThePyro;
36new TFHoliday:TFHoliday_SpyVsEngyWar;
37new TFHoliday:TFHoliday_FullMoon;
38new TFHoliday:TFHoliday_HalloweenOrFullMoon;
39new TFHoliday:TFHoliday_HalloweenOrFullMoonOrValentines;
40new TFHoliday:TFHoliday_AprilFools;
41public Extension:__ext_tf2 =
42{
43 name = "TF2 Tools",
44 file = "game.tf2.ext",
45 autoload = 0,
46 required = 1,
47};
48new String:TFResourceNames[18][] =
49{
50public void:__ext_core_SetNTVOptional()
51 {
52 MarkNativeAsOptional("GetFeatureStatus");
53 MarkNativeAsOptional("RequireFeature");
54 MarkNativeAsOptional("AddCommandListener");
55 MarkNativeAsOptional("RemoveCommandListener");
56 MarkNativeAsOptional("BfWriteBool");
57 MarkNativeAsOptional("BfWriteByte");
58 MarkNativeAsOptional("BfWriteChar");
59 MarkNativeAsOptional("BfWriteShort");
60 MarkNativeAsOptional("BfWriteWord");
61 MarkNativeAsOptional("BfWriteNum");
62 MarkNativeAsOptional("BfWriteFloat");
63 MarkNativeAsOptional("BfWriteString");
64 MarkNativeAsOptional("BfWriteEntity");
65 MarkNativeAsOptional("BfWriteAngle");
66 MarkNativeAsOptional("BfWriteCoord");
67 MarkNativeAsOptional("BfWriteVecCoord");
68 MarkNativeAsOptional("BfWriteVecNormal");
69 MarkNativeAsOptional("BfWriteAngles");
70 MarkNativeAsOptional("BfReadBool");
71 MarkNativeAsOptional("BfReadByte");
72 MarkNativeAsOptional("BfReadChar");
73 MarkNativeAsOptional("BfReadShort");
74 MarkNativeAsOptional("BfReadWord");
75 MarkNativeAsOptional("BfReadNum");
76 MarkNativeAsOptional("BfReadFloat");
77 MarkNativeAsOptional("BfReadString");
78 MarkNativeAsOptional("BfReadEntity");
79 MarkNativeAsOptional("BfReadAngle");
80 MarkNativeAsOptional("BfReadCoord");
81 MarkNativeAsOptional("BfReadVecCoord");
82 MarkNativeAsOptional("BfReadVecNormal");
83 MarkNativeAsOptional("BfReadAngles");
84 MarkNativeAsOptional("BfGetNumBytesLeft");
85 MarkNativeAsOptional("BfWrite.WriteBool");
86 MarkNativeAsOptional("BfWrite.WriteByte");
87 MarkNativeAsOptional("BfWrite.WriteChar");
88 MarkNativeAsOptional("BfWrite.WriteShort");
89 MarkNativeAsOptional("BfWrite.WriteWord");
90 MarkNativeAsOptional("BfWrite.WriteNum");
91 MarkNativeAsOptional("BfWrite.WriteFloat");
92 MarkNativeAsOptional("BfWrite.WriteString");
93 MarkNativeAsOptional("BfWrite.WriteEntity");
94 MarkNativeAsOptional("BfWrite.WriteAngle");
95 MarkNativeAsOptional("BfWrite.WriteCoord");
96 MarkNativeAsOptional("BfWrite.WriteVecCoord");
97 MarkNativeAsOptional("BfWrite.WriteVecNormal");
98 MarkNativeAsOptional("BfWrite.WriteAngles");
99 MarkNativeAsOptional("BfRead.ReadBool");
100 MarkNativeAsOptional("BfRead.ReadByte");
101 MarkNativeAsOptional("BfRead.ReadChar");
102 MarkNativeAsOptional("BfRead.ReadShort");
103 MarkNativeAsOptional("BfRead.ReadWord");
104 MarkNativeAsOptional("BfRead.ReadNum");
105 MarkNativeAsOptional("BfRead.ReadFloat");
106 MarkNativeAsOptional("BfRead.ReadString");
107 MarkNativeAsOptional("BfRead.ReadEntity");
108 MarkNativeAsOptional("BfRead.ReadAngle");
109 MarkNativeAsOptional("BfRead.ReadCoord");
110 MarkNativeAsOptional("BfRead.ReadVecCoord");
111 MarkNativeAsOptional("BfRead.ReadVecNormal");
112 MarkNativeAsOptional("BfRead.ReadAngles");
113 MarkNativeAsOptional("BfRead.GetNumBytesLeft");
114 MarkNativeAsOptional("PbReadInt");
115 MarkNativeAsOptional("PbReadFloat");
116 MarkNativeAsOptional("PbReadBool");
117 MarkNativeAsOptional("PbReadString");
118 MarkNativeAsOptional("PbReadColor");
119 MarkNativeAsOptional("PbReadAngle");
120 MarkNativeAsOptional("PbReadVector");
121 MarkNativeAsOptional("PbReadVector2D");
122 MarkNativeAsOptional("PbGetRepeatedFieldCount");
123 MarkNativeAsOptional("PbSetInt");
124 MarkNativeAsOptional("PbSetFloat");
125 MarkNativeAsOptional("PbSetBool");
126 MarkNativeAsOptional("PbSetString");
127 MarkNativeAsOptional("PbSetColor");
128 MarkNativeAsOptional("PbSetAngle");
129 MarkNativeAsOptional("PbSetVector");
130 MarkNativeAsOptional("PbSetVector2D");
131 MarkNativeAsOptional("PbAddInt");
132 MarkNativeAsOptional("PbAddFloat");
133 MarkNativeAsOptional("PbAddBool");
134 MarkNativeAsOptional("PbAddString");
135 MarkNativeAsOptional("PbAddColor");
136 MarkNativeAsOptional("PbAddAngle");
137 MarkNativeAsOptional("PbAddVector");
138 MarkNativeAsOptional("PbAddVector2D");
139 MarkNativeAsOptional("PbRemoveRepeatedFieldValue");
140 MarkNativeAsOptional("PbReadMessage");
141 MarkNativeAsOptional("PbReadRepeatedMessage");
142 MarkNativeAsOptional("PbAddMessage");
143 MarkNativeAsOptional("Protobuf.ReadInt");
144 MarkNativeAsOptional("Protobuf.ReadFloat");
145 MarkNativeAsOptional("Protobuf.ReadBool");
146 MarkNativeAsOptional("Protobuf.ReadString");
147 MarkNativeAsOptional("Protobuf.ReadColor");
148 MarkNativeAsOptional("Protobuf.ReadAngle");
149 MarkNativeAsOptional("Protobuf.ReadVector");
150 MarkNativeAsOptional("Protobuf.ReadVector2D");
151 MarkNativeAsOptional("Protobuf.GetRepeatedFieldCount");
152 MarkNativeAsOptional("Protobuf.SetInt");
153 MarkNativeAsOptional("Protobuf.SetFloat");
154 MarkNativeAsOptional("Protobuf.SetBool");
155 MarkNativeAsOptional("Protobuf.SetString");
156 MarkNativeAsOptional("Protobuf.SetColor");
157 MarkNativeAsOptional("Protobuf.SetAngle");
158 MarkNativeAsOptional("Protobuf.SetVector");
159 MarkNativeAsOptional("Protobuf.SetVector2D");
160 MarkNativeAsOptional("Protobuf.AddInt");
161 MarkNativeAsOptional("Protobuf.AddFloat");
162 MarkNativeAsOptional("Protobuf.AddBool");
163 MarkNativeAsOptional("Protobuf.AddString");
164 MarkNativeAsOptional("Protobuf.AddColor");
165 MarkNativeAsOptional("Protobuf.AddAngle");
166 MarkNativeAsOptional("Protobuf.AddVector");
167 MarkNativeAsOptional("Protobuf.AddVector2D");
168 MarkNativeAsOptional("Protobuf.RemoveRepeatedFieldValue");
169 MarkNativeAsOptional("Protobuf.ReadMessage");
170 MarkNativeAsOptional("Protobuf.ReadRepeatedMessage");
171 MarkNativeAsOptional("Protobuf.AddMessage");
172 VerifyCoreVersion();
173 return void:0;
174 }
175
176bool:StrEqual(String:str1[], String:str2[], bool:caseSensitive)
177 {
178 return strcmp(str1, str2, caseSensitive) == 0;
179 }
180
181void:PrintToChatAll(String:format[])
182 {
183 new String:buffer[256];
184 new i = 1;
185 while (i <= MaxClients)
186 {
187 if (IsClientInGame(i))
188 {
189 SetGlobalTransTarget(i);
190 VFormat(buffer, 254, format, 2);
191 PrintToChat(i, "%s", buffer);
192 }
193 i++;
194 }
195 return void:0;
196 }
197
198void:ReplyToTargetError(client, reason)
199 {
200 switch (reason)
201 {
202 case -7:
203 {
204 ReplyToCommand(client, "[SM] %t", "More than one client matched");
205 }
206 case -6:
207 {
208 ReplyToCommand(client, "[SM] %t", "Cannot target bot");
209 }
210 case -5:
211 {
212 ReplyToCommand(client, "[SM] %t", "No matching clients");
213 }
214 case -4:
215 {
216 ReplyToCommand(client, "[SM] %t", "Unable to target");
217 }
218 case -3:
219 {
220 ReplyToCommand(client, "[SM] %t", "Target is not in game");
221 }
222 case -2:
223 {
224 ReplyToCommand(client, "[SM] %t", "Target must be dead");
225 }
226 case -1:
227 {
228 ReplyToCommand(client, "[SM] %t", "Target must be alive");
229 }
230 case 0:
231 {
232 ReplyToCommand(client, "[SM] %t", "No matching client");
233 }
234 default:
235 {
236 }
237 }
238 return void:0;
239 }
240
241FindTarget(client, String:target[], bool:nobots, bool:immunity)
242 {
243 new String:target_name[64];
244 new target_list[1];
245 new target_count;
246 new bool:tn_is_ml;
247 new flags = 16;
248 if (nobots)
249 {
250 flags |= 32;
251 }
252 if (!immunity)
253 {
254 flags |= 8;
255 }
256 if (0 < (target_count = ProcessTargetString(target, client, target_list, 1, flags, target_name, 64, tn_is_ml)))
257 {
258 return target_list[0];
259 }
260 ReplyToTargetError(client, target_count);
261 return -1;
262 }
263
264public SQLCallback_NoError(Handle:owner, Handle:hndl, String:error[], any:suspend_errors)
265 {
266 return 0;
267 }
268
269public void:DBConnection(Database:db, String:error[], any:data)
270 {
271 if (db)
272 {
273 hDatabase = db;
274 DBCreateTables();
275 }
276 else
277 {
278 LogError("%s Failed to connect to the database! Error: %s", "[Store]", error);
279 }
280 return void:0;
281 }
282
283DBCreateTables()
284 {
285 decl String:query[256];
286 decl String:query2[256];
287 decl String:query3[256];
288 Format(query, 256, "CREATE TABLE IF NOT EXISTS playerinfo (steamid VARCHAR(32) NOT NULL PRIMARY KEY, name VARCHAR(32) NOT NULL, points INT(11) NOT NULL);");
289 Database.Query(hDatabase, SQLQueryCallback:39, query, any:0, DBPriority:1);
290 Format(query2, 256, "CREATE TABLE IF NOT EXISTS store_items (uniqueid INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, itemid INT(11) NOT NULL, ownerid VARCHAR(32) NOT NULL);");
291 Database.Query(hDatabase, SQLQueryCallback:39, query2, any:0, DBPriority:1);
292 Format(query3, 256, "CREATE TABLE IF NOT EXISTS store_equipped (ownerid VARCHAR(32) NOT NULL PRIMARY KEY, name VARCHAR(32) NOT NULL, tag INT(11) NOT NULL, weaponmelee INT(11) NOT NULL, weaponunusual INT(11) NOT NULL);");
293 Database.Query(hDatabase, SQLQueryCallback:39, query3, any:0, DBPriority:1);
294 return 0;
295 }
296
297public void:DBPostCreateTables(Database:db, DBResultSet:results, String:error[], any:data)
298 {
299 if (!results)
300 {
301 LogError("%s Failed to create tables in the database! Error: %s", "[Store]", error);
302 }
303 return void:0;
304 }
305
306public DBInsertPlayer(client, String:auth[])
307 {
308 new String:name[32];
309 GetClientName(client, name, 32);
310 decl String:query[256];
311 Format(query, 256, "INSERT INTO playerinfo (steamid, name, points) VALUES ('%s', '%s', '0')ON DUPLICATE KEY UPDATE name = '%s';", auth, name, name);
312 Database.Query(hDatabase, SQLQueryCallback:41, query, any:0, DBPriority:1);
313 decl String:query2[256];
314 Format(query2, 256, "INSERT INTO store_equipped (ownerid, name, tag, weaponmelee, weaponunusual) VALUES ('%s', '%s', '0', '100', '200')ON DUPLICATE KEY UPDATE name = '%s';", auth, name, name);
315 Database.Query(hDatabase, SQLQueryCallback:41, query2, any:0, DBPriority:1);
316 return 0;
317 }
318
319public void:DBPostInsertClient(Database:db, DBResultSet:results, String:error[], any:data)
320 {
321 if (!results)
322 {
323 LogError("%s Failed to insert client into the database! Error: %s", "[Store]", error);
324 }
325 return void:0;
326 }
327
328public DBCheckClientInfo(client, String:auth[])
329 {
330 decl String:query[256];
331 decl String:query2[256];
332 decl String:query3[256];
333 Format(query, 256, "SELECT * FROM playerinfo WHERE steamid = '%s';", auth);
334 Database.Query(hDatabase, SQLQueryCallback:35, query, client, DBPriority:1);
335 Format(query2, 256, "SELECT * FROM store_items WHERE ownerid = '%s'", auth);
336 Database.Query(hDatabase, SQLQueryCallback:33, query2, client, DBPriority:1);
337 Format(query3, 256, "SELECT * FROM store_equipped WHERE ownerid = '%s'", auth);
338 Database.Query(hDatabase, SQLQueryCallback:31, query3, client, DBPriority:1);
339 return 0;
340 }
341
342public void:DBPostCheckClientPoints(Database:db, DBResultSet:results, String:error[], any:data)
343 {
344 if (results)
345 {
346 if (SQL_FetchRow(results))
347 {
348 g_iPoints[data] = SQL_FetchInt(results, 2, 0);
349 }
350 }
351 else
352 {
353 LogError("%s Failed to check client's points in the database! Error: %s", "[Store]", error);
354 }
355 return void:0;
356 }
357
358public void:DBPostCheckClientItems(Database:db, DBResultSet:results, String:error[], any:data)
359 {
360 if (results)
361 {
362 new i;
363 while (i < 1000)
364 {
365 g_iItems[data][i] = 0;
366 i++;
367 }
368 while (SQL_FetchRow(results))
369 {
370 g_iItems[data][SQL_FetchInt(results, 1, 0)] = 1;
371 }
372 return void:0;
373 }
374 LogError("%s Failed to check client's items in the database! Error: %s", "[Store]", error);
375 return void:0;
376 }
377
378public void:DBPostCheckClientEquipment(Database:db, DBResultSet:results, String:error[], any:data)
379 {
380 if (results)
381 {
382 new i;
383 while (i < 1000)
384 {
385 g_iEquipped[data][i] = 0;
386 i++;
387 }
388 if (SQL_FetchRow(results))
389 {
390 g_iEquipped[data][SQL_FetchInt(results, 2, 0)] = 1;
391 g_iEquipped[data][SQL_FetchInt(results, 3, 0)] = 1;
392 }
393 return void:0;
394 }
395 LogError("%s Failed to check client's equipment in the database! Error: %s", "[Store]", error);
396 return void:0;
397 }
398
399public void:DBPostChangeData(Database:db, DBResultSet:results, String:error[], any:data)
400 {
401 if (!results)
402 {
403 LogError("%s Failed to change a client's data! Error: %s", "[Store]", error);
404 }
405 return void:0;
406 }
407
408public void:DBPostCreateItem(Database:db, DBResultSet:results, String:error[], any:data)
409 {
410 if (!results)
411 {
412 LogError("%s Failed to change a create item! Error: %s", "[Store]", error);
413 }
414 return void:0;
415 }
416
417public Action:CreateItem(owner, itemid)
418 {
419 new String:steamid[32];
420 GetClientAuthId(owner, AuthIdType:1, steamid, 32, true);
421 decl String:query[256];
422 Format(query, 256, "INSERT INTO store_items (uniqueid, itemid, ownerid) VALUES ('NULL', '%d', '%s');", itemid, steamid);
423 Database.Query(hDatabase, SQLQueryCallback:37, query, any:0, DBPriority:1);
424 return Action:0;
425 }
426
427public Action:SetEquipped(client, type, itemid)
428 {
429 new String:steamid[32];
430 GetClientAuthId(client, AuthIdType:1, steamid, 32, true);
431 decl String:query[256];
432 if (type == 1)
433 {
434 Format(query, 256, "UPDATE store_equipped SET tag = '%i' WHERE ownerid = '%s';", itemid, steamid);
435 }
436 else
437 {
438 if (type == 2)
439 {
440 Format(query, 256, "UPDATE store_equipped SET weaponmelee ='%i' WHERE ownerid = '%s';", itemid, steamid);
441 }
442 if (type == 3)
443 {
444 Format(query, 256, "UPDATE store_equipped SET weaponunusual = %i' WHERE ownerid = '%s';", itemid, steamid);
445 }
446 }
447 Database.Query(hDatabase, SQLQueryCallback:29, query, client, DBPriority:1);
448 return Action:0;
449 }
450
451public Action:UpdateClientInfo(client)
452 {
453 new String:steamid[32];
454 GetClientAuthId(client, AuthIdType:1, steamid, 32, true);
455 DBCheckClientInfo(client, steamid);
456 return Action:0;
457 }
458
459public Action:AddPoints(target, points)
460 {
461 new String:steamid[32];
462 GetClientAuthId(target, AuthIdType:1, steamid, 32, true);
463 decl String:query[256];
464 decl String:query2[256];
465 Format(query, 256, "UPDATE playerinfo SET points = points + '%i' WHERE steamid = '%s';", points, steamid);
466 Format(query2, 256, "SELECT * FROM playerinfo WHERE steamid = '%s';", steamid);
467 Database.Query(hDatabase, SQLQueryCallback:29, query, target, DBPriority:1);
468 Database.Query(hDatabase, SQLQueryCallback:35, query2, target, DBPriority:1);
469 return Action:0;
470 }
471
472public Action:StorePurchase(target, points)
473 {
474 new String:steamid[32];
475 GetClientAuthId(target, AuthIdType:1, steamid, 32, true);
476 decl String:query[256];
477 decl String:query2[256];
478 Format(query, 256, "UPDATE playerinfo SET points = points - '%i' WHERE steamid = '%s';", points, steamid);
479 Format(query2, 256, "SELECT * FROM playerinfo WHERE steamid = '%s';", steamid);
480 Database.Query(hDatabase, SQLQueryCallback:29, query, target, DBPriority:1);
481 Database.Query(hDatabase, SQLQueryCallback:35, query2, target, DBPriority:1);
482 return Action:0;
483 }
484
485bool:IsValidClient(client)
486 {
487 new var1;
488 return 1 <= client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client);
489 }
490
491public void:OnPluginStart()
492 {
493 Database.Connect(SQLConnectCallback:25, "store", any:0);
494 CreateTimer(360.0, Timer_Advert, any:0, 1);
495 CreateTimer(60.0, Timer_AddPoints, any:0, 1);
496 RegConsoleCmd("sm_points", Command_Points, "", 0);
497 RegConsoleCmd("sm_credits", Command_Points, "", 0);
498 RegConsoleCmd("sm_store", Command_Store, "", 0);
499 RegConsoleCmd("sm_shop", Command_Store, "", 0);
500 RegAdminCmd("sm_addpoints", Command_AddPoints, 8, "sm_addpoints <#userid|name> <#amount>", "", 0);
501 HookEvent("player_spawn", Event_PlayerSpawn, EventHookMode:1);
502 hShopMenu = CreateMenu(Handler_ShopMenu, MenuAction:-1);
503 SetMenuTitle(hShopMenu, "Shop Menu");
504 AddMenuItem(hShopMenu, "0", "Tags", 0);
505 AddMenuItem(hShopMenu, "1", "Weapons", 0);
506 AddMenuItem(hShopMenu, "2", "Inventory", 0);
507 hTagsMenu = CreateMenu(Handler_TagsMenu, MenuAction:-1);
508 SetMenuTitle(hTagsMenu, "Tags Menu");
509 AddMenuItem(hTagsMenu, "1", "[Nab] (1,000)", 0);
510 AddMenuItem(hTagsMenu, "2", "[Faggot] (2,500)", 0);
511 AddMenuItem(hTagsMenu, "3", "[Big Daddy] (4,000)", 0);
512 AddMenuItem(hTagsMenu, "4", "[Boss] (4,000)", 0);
513 SetMenuExitBackButton(hTagsMenu, true);
514 hWepsMenu = CreateMenu(Handler_WepsMenu, MenuAction:-1);
515 SetMenuTitle(hWepsMenu, "Weapons Menu");
516 AddMenuItem(hWepsMenu, "101", "Saxxy (25,000)", 0);
517 AddMenuItem(hWepsMenu, "102", "Golden Wrench (22,500)", 0);
518 SetMenuExitBackButton(hWepsMenu, true);
519 hInvMenu = CreateMenu(Handler_InvMenu, MenuAction:-1);
520 SetMenuTitle(hInvMenu, "Inventory");
521 AddMenuItem(hInvMenu, "0", "Tags Inventory", 0);
522 AddMenuItem(hInvMenu, "1", "Weapons Inventory", 0);
523 SetMenuExitBackButton(hInvMenu, true);
524 hInvTagsMenu = CreateMenu(Handler_InvTagsMenu, MenuAction:-1);
525 SetMenuTitle(hInvTagsMenu, "Tags Inventory");
526 AddMenuItem(hInvTagsMenu, "0", "None", 0);
527 AddMenuItem(hInvTagsMenu, "1", "[Nab]", 0);
528 AddMenuItem(hInvTagsMenu, "2", "[Faggot]", 0);
529 AddMenuItem(hInvTagsMenu, "3", "[Big Daddy]", 0);
530 AddMenuItem(hInvTagsMenu, "4", "[Boss]", 0);
531 SetMenuExitBackButton(hInvTagsMenu, true);
532 hInvWepsMenu = CreateMenu(Handler_InvWepsMenu, MenuAction:-1);
533 SetMenuTitle(hInvWepsMenu, "Weapons Inventory");
534 AddMenuItem(hInvWepsMenu, "100", "None", 0);
535 AddMenuItem(hInvWepsMenu, "101", "Saxxy", 0);
536 AddMenuItem(hInvWepsMenu, "102", "Golden Wrench", 0);
537 AddMenuItem(hInvWepsMenu, "103", "Golden Pan", 0);
538 SetMenuExitBackButton(hInvWepsMenu, true);
539 return void:0;
540 }
541
542public void:OnClientAuthorized(client, String:auth[])
543 {
544 DBInsertPlayer(client, auth);
545 DBCheckClientInfo(client, auth);
546 return void:0;
547 }
548
549public Action:OnChatMessage(&author, Handle:recipients, String:name[], String:message[])
550 {
551 if (g_iEquipped[author][0] != 1)
552 {
553 if (g_iEquipped[author][1] == 1)
554 {
555 Format(name, 64, "\x04[Nab] %s", name);
556 }
557 else
558 {
559 if (g_iEquipped[author][2] == 1)
560 {
561 Format(name, 64, "\x07FF69B4[Faggot] %s", name);
562 }
563 if (g_iEquipped[author][3] == 1)
564 {
565 Format(name, 64, "\x07FF00FE[Big Daddy] %s", name);
566 }
567 if (g_iEquipped[author][4] == 1)
568 {
569 Format(name, 64, "\x07424BF4[Boss] %s", name);
570 }
571 }
572 return Action:1;
573 }
574 return Action:0;
575 }
576
577public Action:Event_PlayerSpawn(Event:event, String:name[], bool:dontBroadcast)
578 {
579 new client = GetClientOfUserId(GetEventInt(event, "userid", 0));
580 new var1;
581 if (IsValidClient(client) && g_iEquipped[client][100] != 1)
582 {
583 if (g_iEquipped[client][101] == 1)
584 {
585 TF2Items_GiveWeapon(client, 423);
586 }
587 if (g_iEquipped[client][102] == 1)
588 {
589 TF2Items_GiveWeapon(client, 169);
590 }
591 if (g_iEquipped[client][103] == 1)
592 {
593 new Handle:hItem = TF2Items_CreateItem(2);
594 TF2Items_SetItemIndex(hItem, 1071);
595 TF2Items_SetNumAttributes(hItem, 1);
596 TF2Items_SetAttribute(hItem, 0, 150, 1.0);
597 TF2Items_SetAttribute(hItem, 1, 542, 0.0);
598 }
599 }
600 return Action:0;
601 }
602
603public Action:Timer_Advert(Handle:timer, any:data)
604 {
605 PrintToChatAll("%s Plugin made by %s (%s) (Version: %s).", "[Store]", "Stick", "/id/StickOfficial", "1.0");
606 return Action:0;
607 }
608
609public Action:Timer_AddPoints(Handle:timer, any:data)
610 {
611 new i = 1;
612 while (i <= MaxClients)
613 {
614 if (IsValidClient(i))
615 {
616 new String:name[32];
617 GetClientName(i, name, 32);
618 new iAdd = 2;
619 if (GetUserFlagBits(i) & 131072 == 131072)
620 {
621 iAdd *= 3;
622 }
623 new var1;
624 if (StrContains(name, "Nᴀʙ", false) || StrContains(name, "nab", false))
625 {
626 iAdd *= 2;
627 }
628 AddPoints(i, iAdd);
629 PrintToChat(i, "%s You have been given %d points for playing on this server.", "[Store]", iAdd);
630 }
631 i++;
632 }
633 return Action:0;
634 }
635
636public Action:Command_Points(client, args)
637 {
638 PrintToChat(client, "%s You have %i points.", "[Store]", g_iPoints[client]);
639 return Action:3;
640 }
641
642public Action:Command_Store(client, args)
643 {
644 DisplayMenu(hShopMenu, client, 0);
645 return Action:3;
646 }
647
648public Action:Command_AddPoints(client, args)
649 {
650 new String:steamid[32];
651 GetClientAuthId(client, AuthIdType:1, steamid, 32, true);
652 if (!StrEqual(steamid, "STEAM_0:0:2112798", true))
653 {
654 PrintToChat(client, "%s This command is not for you!", "[Store]");
655 return Action:3;
656 }
657 new String:szArgs[2][64] = "\x08";
658 GetCmdArg(1, szArgs[0][szArgs], 64);
659 GetCmdArg(2, szArgs[1], 64);
660 new iAdd = StringToInt(szArgs[1], 10);
661 if (0 > iAdd)
662 {
663 ReplyToCommand(client, "%s Points cannot be negative.", "[Store]");
664 return Action:3;
665 }
666 new target = FindTarget(client, szArgs[0][szArgs], true, true);
667 if (!IsValidClient(target))
668 {
669 ReplyToCommand(client, "%s Target is not valid", "[Store]");
670 return Action:3;
671 }
672 AddPoints(target, iAdd);
673 new String:name[32];
674 GetClientName(client, name, 32);
675 ReplyToCommand(target, "%s You have been given %d points from %s.", "[Store]", iAdd, name);
676 return Action:3;
677 }
678
679public Handler_ShopMenu(Menu:menu, MenuAction:action, param1, param2)
680 {
681 switch (action)
682 {
683 case 4:
684 {
685 new String:selection[32];
686 GetMenuItem(menu, param2, selection, 32, 0, "", 0);
687 if (StrEqual(selection, "0", true))
688 {
689 DisplayMenu(hTagsMenu, param1, 0);
690 }
691 if (StrEqual(selection, "1", true))
692 {
693 DisplayMenu(hWepsMenu, param1, 0);
694 }
695 if (StrEqual(selection, "2", true))
696 {
697 DisplayMenu(hInvMenu, param1, 0);
698 }
699 }
700 default:
701 {
702 }
703 }
704 return 0;
705 }
706
707public Handler_InvMenu(Menu:menu, MenuAction:action, param1, param2)
708 {
709 switch (action)
710 {
711 case 4:
712 {
713 new String:selection[32];
714 GetMenuItem(menu, param2, selection, 32, 0, "", 0);
715 if (StrEqual(selection, "0", true))
716 {
717 DisplayMenu(hInvTagsMenu, param1, 0);
718 }
719 else
720 {
721 if (StrEqual(selection, "1", true))
722 {
723 DisplayMenu(hInvWepsMenu, param1, 0);
724 }
725 }
726 }
727 case 8:
728 {
729 switch (param2)
730 {
731 case -6:
732 {
733 DisplayMenu(hShopMenu, param1, 0);
734 }
735 default:
736 {
737 }
738 }
739 }
740 default:
741 {
742 }
743 }
744 return 0;
745 }
746
747public Handler_TagsMenu(Menu:menu, MenuAction:action, param1, param2)
748 {
749 switch (action)
750 {
751 case 4:
752 {
753 if (IsValidClient(param1))
754 {
755 new String:selection[32];
756 GetMenuItem(menu, param2, selection, 32, 0, "", 0);
757 if (StrEqual(selection, "1", true))
758 {
759 PurchaseItem(param1, 1, 1000);
760 }
761 else
762 {
763 if (StrEqual(selection, "2", true))
764 {
765 PurchaseItem(param1, 2, 2500);
766 }
767 if (StrEqual(selection, "3", true))
768 {
769 PurchaseItem(param1, 3, 4000);
770 }
771 if (StrEqual(selection, "4", true))
772 {
773 PurchaseItem(param1, 4, 4000);
774 }
775 }
776 }
777 }
778 case 8:
779 {
780 switch (param2)
781 {
782 case -6:
783 {
784 DisplayMenu(hShopMenu, param1, 0);
785 }
786 default:
787 {
788 }
789 }
790 }
791 case 256:
792 {
793 new String:item[32];
794 GetMenuItem(menu, param2, item, 32, 0, "", 0);
795 new tagnum = StringToInt(item, 10);
796 if (g_iItems[param1][tagnum])
797 {
798 return 1;
799 }
800 }
801 default:
802 {
803 }
804 }
805 return 0;
806 }
807
808public Handler_WepsMenu(Menu:menu, MenuAction:action, param1, param2)
809 {
810 switch (action)
811 {
812 case 4:
813 {
814 if (IsValidClient(param1))
815 {
816 new String:selection[32];
817 GetMenuItem(menu, param2, selection, 32, 0, "", 0);
818 if (StrEqual(selection, "101", true))
819 {
820 PurchaseItem(param1, 101, 25000);
821 }
822 else
823 {
824 if (StrEqual(selection, "102", true))
825 {
826 PurchaseItem(param1, 102, 22500);
827 }
828 if (StrEqual(selection, "103", true))
829 {
830 PurchaseItem(param1, 103, 25000);
831 }
832 }
833 }
834 }
835 case 8:
836 {
837 switch (param2)
838 {
839 case -6:
840 {
841 DisplayMenu(hShopMenu, param1, 0);
842 }
843 default:
844 {
845 }
846 }
847 }
848 case 256:
849 {
850 new String:item[32];
851 GetMenuItem(menu, param2, item, 32, 0, "", 0);
852 new wepnum = StringToInt(item, 10);
853 if (g_iItems[param1][wepnum])
854 {
855 return 1;
856 }
857 }
858 default:
859 {
860 }
861 }
862 return 0;
863 }
864
865public Handler_InvTagsMenu(Menu:menu, MenuAction:action, param1, param2)
866 {
867 switch (action)
868 {
869 case 4:
870 {
871 new String:selection[32];
872 GetMenuItem(menu, param2, selection, 32, 0, "", 0);
873 new selectnum = StringToInt(selection, 10);
874 SetEquipped(param1, 1, selectnum);
875 UpdateClientInfo(param1);
876 }
877 case 8:
878 {
879 switch (param2)
880 {
881 case -6:
882 {
883 DisplayMenu(hInvMenu, param1, 0);
884 }
885 default:
886 {
887 }
888 }
889 }
890 case 256:
891 {
892 new String:item[32];
893 GetMenuItem(menu, param2, item, 32, 0, "", 0);
894 new tagnum = StringToInt(item, 10);
895 new var1;
896 if (tagnum && g_iItems[param1][tagnum] != 1)
897 {
898 return 6;
899 }
900 if (g_iEquipped[param1][tagnum] == 1)
901 {
902 return 1;
903 }
904 }
905 default:
906 {
907 }
908 }
909 return 0;
910 }
911
912public Handler_InvWepsMenu(Menu:menu, MenuAction:action, param1, param2)
913 {
914 switch (action)
915 {
916 case 4:
917 {
918 new String:selection[32];
919 GetMenuItem(menu, param2, selection, 32, 0, "", 0);
920 new selectnum = StringToInt(selection, 10);
921 SetEquipped(param1, 2, selectnum);
922 UpdateClientInfo(param1);
923 }
924 case 8:
925 {
926 switch (param2)
927 {
928 case -6:
929 {
930 DisplayMenu(hInvMenu, param1, 0);
931 }
932 default:
933 {
934 }
935 }
936 }
937 case 256:
938 {
939 new String:item[32];
940 GetMenuItem(menu, param2, item, 32, 0, "", 0);
941 new wepnum = StringToInt(item, 10);
942 new var1;
943 if (wepnum != 100 && g_iItems[param1][wepnum] != 1)
944 {
945 return 6;
946 }
947 if (g_iEquipped[param1][wepnum] == 1)
948 {
949 return 1;
950 }
951 }
952 default:
953 {
954 }
955 }
956 return 0;
957 }
958
959public PurchaseItem(client, item, price)
960 {
961 if (g_iPoints[client] >= price)
962 {
963 StorePurchase(client, price);
964 CreateItem(client, item);
965 UpdateClientInfo(client);
966 PrintToChat(client, "%s Thank you for purchasing this item. Equip it in your inventory.", "[Store]");
967 }
968 else
969 {
970 new iReqPoints = price - g_iPoints[client];
971 PrintToChat(client, "%s You need %i more points to buy this item.", "[Store]", iReqPoints);
972 }
973 return 0;
974 }