Fixed client serials not being unique on Windows (
bug 5285, r=psychonic).
5 name = "Forward Testing Lab #1",
6 author = "AlliedModders LLC",
7 description = "Tests suite #1 for forwards created by plugins",
9 url = "http://www.sourcemod.net/"
12 new Handle:g_GlobalFwd = INVALID_HANDLE;
13 new Handle:g_PrivateFwd = INVALID_HANDLE;
15 public OnPluginStart()
17 RegServerCmd("test_create_gforward", Command_CreateGlobalForward);
18 RegServerCmd("test_create_pforward", Command_CreatePrivateForward);
19 RegServerCmd("test_exec_gforward", Command_ExecGlobalForward);
20 RegServerCmd("test_exec_pforward", Command_ExecPrivateForward);
25 CloseHandle(g_GlobalFwd);
26 CloseHandle(g_PrivateFwd);
29 public Action:Command_CreateGlobalForward(args)
31 if (g_GlobalFwd != INVALID_HANDLE)
33 CloseHandle(g_GlobalFwd);
36 g_GlobalFwd = CreateGlobalForward("OnGlobalForward", ET_Ignore, Param_Any, Param_Cell, Param_Float, Param_String, Param_Array, Param_CellByRef, Param_FloatByRef);
38 if (g_GlobalFwd == INVALID_HANDLE)
40 PrintToServer("Failed to create global forward!");
43 return Plugin_Handled;
46 public Action:Command_CreatePrivateForward(args)
51 if (g_PrivateFwd != INVALID_HANDLE)
53 CloseHandle(g_PrivateFwd);
56 g_PrivateFwd = CreateForward(ET_Hook, Param_Cell, Param_String, Param_VarArgs);
58 if (g_PrivateFwd == INVALID_HANDLE)
60 PrintToServer("Failed to create private forward!")
63 pl = FindPluginByFile("fwdtest2.smx");
67 PrintToServer("Could not find fwdtest2.smx!");
68 return Plugin_Handled;
71 func = GetFunctionByName(pl, "OnPrivateForward");
73 /* This shouldn't happen, but oh well */
74 if (func == INVALID_FUNCTION)
76 PrintToServer("Could not find \"OnPrivateForward\" in fwdtest2.smx!");
77 return Plugin_Handled;
80 if (!AddToForward(g_PrivateFwd, pl, func) || !AddToForward(g_PrivateFwd, GetMyHandle(), ZohMyGod))
82 PrintToServer("Failed to add functions to private forward!");
83 return Plugin_Handled;
86 return Plugin_Handled;
89 public Action:Command_ExecGlobalForward(args)
95 if (g_GlobalFwd == INVALID_HANDLE)
97 PrintToServer("Failed to execute global forward. Create it first.");
98 return Plugin_Handled;
101 PrintToServer("Beginning call to %d functions in global forward \"OnGlobalForward\"", GetForwardFunctionCount(g_GlobalFwd));
103 Call_StartForward(g_GlobalFwd);
104 Call_PushCell(OnPluginStart);
106 Call_PushFloat(-8.5);
107 Call_PushString("Anata wa doko desu ka?");
108 Call_PushArray({0.0, 1.1, 2.2}, 3);
110 Call_PushFloatRef(b);
111 err = Call_Finish(ret);
113 PrintToServer("Call to global forward \"OnGlobalForward\" completed");
114 PrintToServer("Error code = %d (expected: %d)", err, 0);
115 PrintToServer("Return value = %d (expected: %d)", ret, Plugin_Continue);
117 PrintToServer("a = %d (expected: %d)", a, 777);
118 PrintToServer("b = %f (expected: %f)", b, -0.782);
120 return Plugin_Handled;
123 public Action:Command_ExecPrivateForward(args)
127 if (g_PrivateFwd == INVALID_HANDLE)
129 PrintToServer("Failed to execute private forward. Create it first.");
130 return Plugin_Handled;
133 PrintToServer("Beginning call to %d functions in private forward", GetForwardFunctionCount(g_PrivateFwd));
135 Call_StartForward(g_PrivateFwd);
137 Call_PushString("I am a format string: %d %d %d %d %d %d");
144 err = Call_Finish(ret);
146 PrintToServer("Call to private forward completed");
147 PrintToServer("Error code = %d (expected: %d)", err, 0);
148 PrintToServer("Return value = %d (expected: %d)", ret, Plugin_Handled);
150 return Plugin_Handled;
153 public Action:ZohMyGod(num, const String:format[], ...)
155 decl String:buffer[128];
157 PrintToServer("Inside private forward #1");
159 PrintToServer("num = %d (expected: %d)", num, 24);
161 VFormat(buffer, sizeof(buffer), format, 3);
162 PrintToServer("buffer = \"%s\" (expected: \"%s\")", buffer, "I am a format string: 0 1 2 3 4 5");
164 PrintToServer("End private forward #1");
166 return Plugin_Continue;