Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Server Code Submissions

Reply
 
Thread Tools Display Modes
  #1  
Old 06-24-2011, 02:13 AM
Akkadius's Avatar
Akkadius
Administrator
 
Join Date: Feb 2009
Location: MN
Posts: 2,071
Default COMMITTED: Task Objects to Client

The whole reason why I wanted to export these objects is so that they can be manipulated under the entity_list perl objects. The reason for this is so that you can 'imitate' shared task updates by sending out updates to Group, Guild, Raid, or whatever criteria you want to sort out through the entity list.

Here is the .diff as well as the simple Perl script I used to test these objects with (Verified and working):

$client->UpdateTaskActivity(TaskID, Activity, Count);
$client->AssignTask(TaskID, NPCID);
$client->FailTask(TaskID);
$client->IsTaskCompleted(TaskID);
$client->IsTaskActive(TaskID);
$client->IsTaskActivityActive(TaskID, ActivityID);
$client->IsTaskActivityCompleted(TaskID, ActivityID);

Code:
Index: EQEmuServer/zone/perl_client.cpp
===================================================================
--- EQEmuServer/zone/perl_client.cpp	(revision 1949)
+++ EQEmuServer/zone/perl_client.cpp	(working copy)
@@ -4870,6 +4870,191 @@
 	XSRETURN(1);
 }
 
+XS(XS_Client_UpdateTaskActivity); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Client_UpdateTaskActivity)
+{
+	dXSARGS;
+	if (items != 4)
+		Perl_croak(aTHX_ "Usage: Client::UpdateTaskActivity(THIS, task, activity, count)");
+	{
+		Client *	THIS;
+		int		task = (sint32)SvIV(ST(1));
+		int		activity = (sint32)SvIV(ST(2));
+		int		count = (int32)SvUV(ST(3));
+
+		if (sv_derived_from(ST(0), "Client")) {
+			IV tmp = SvIV((SV*)SvRV(ST(0)));
+			THIS = INT2PTR(Client *,tmp);
+		}
+		else
+			Perl_croak(aTHX_ "THIS is not of type Client");
+		if(THIS == NULL)
+			Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+		THIS->UpdateTaskActivity(task, activity, count);
+	}
+	XSRETURN_EMPTY;
+}
+
+XS(XS_Client_AssignTask); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Client_AssignTask)
+{
+	dXSARGS;
+	if (items != 3)
+		Perl_croak(aTHX_ "Usage: Client::AssignTask(THIS, TaskID, NPCID)");
+	{
+		Client *	THIS;
+		int		TaskID = (sint32)SvIV(ST(1));
+		int		NPCID = (sint32)SvIV(ST(2));
+
+		if (sv_derived_from(ST(0), "Client")) {
+			IV tmp = SvIV((SV*)SvRV(ST(0)));
+			THIS = INT2PTR(Client *,tmp);
+		}
+		else
+			Perl_croak(aTHX_ "THIS is not of type Client");
+		if(THIS == NULL)
+			Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+		THIS->AssignTask(TaskID, NPCID);
+	}
+	XSRETURN_EMPTY;
+}
+
+XS(XS_Client_FailTask); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Client_FailTask)
+{
+	dXSARGS;
+	if (items != 2)
+		Perl_croak(aTHX_ "Usage: Client::FailTask(THIS, TaskID)");
+	{
+		Client *	THIS;
+		int		TaskID = (sint32)SvIV(ST(1));
+
+		if (sv_derived_from(ST(0), "Client")) {
+			IV tmp = SvIV((SV*)SvRV(ST(0)));
+			THIS = INT2PTR(Client *,tmp);
+		}
+		else
+			Perl_croak(aTHX_ "THIS is not of type Client");
+		if(THIS == NULL)
+			Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+		THIS->FailTask(TaskID);
+	}
+	XSRETURN_EMPTY;
+}
+
+XS(XS_Client_IsTaskCompleted); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Client_IsTaskCompleted)
+{
+	dXSARGS;
+	if (items != 2)
+		Perl_croak(aTHX_ "Usage: Client::IsTaskCompleted(THIS, TaskID)");
+	{
+		Client *		THIS;
+		bool		RETVAL;
+		int		TaskID = (sint32)SvIV(ST(1));
+
+		if (sv_derived_from(ST(0), "Client")) {
+			IV tmp = SvIV((SV*)SvRV(ST(0)));
+			THIS = INT2PTR(Client *,tmp);
+		}
+		else
+			Perl_croak(aTHX_ "THIS is not of type Client");
+		if(THIS == NULL)
+			Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+		RETVAL = THIS->IsTaskCompleted(TaskID);
+		ST(0) = boolSV(RETVAL);
+		sv_2mortal(ST(0));
+	}
+	XSRETURN(1);
+}
+
+XS(XS_Client_IsTaskActive); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Client_IsTaskActive)
+{
+	dXSARGS;
+	if (items != 2)
+		Perl_croak(aTHX_ "Usage: Client::IsTaskActive(THIS, TaskID)");
+	{
+		Client *		THIS;
+		bool		RETVAL;
+		int		TaskID = (sint32)SvIV(ST(1));
+
+		if (sv_derived_from(ST(0), "Client")) {
+			IV tmp = SvIV((SV*)SvRV(ST(0)));
+			THIS = INT2PTR(Client *,tmp);
+		}
+		else
+			Perl_croak(aTHX_ "THIS is not of type Client");
+		if(THIS == NULL)
+			Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+		RETVAL = THIS->IsTaskActive(TaskID);
+		ST(0) = boolSV(RETVAL);
+		sv_2mortal(ST(0));
+	}
+	XSRETURN(1);
+}
+
+XS(XS_Client_IsTaskActivityActive); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Client_IsTaskActivityActive)
+{
+	dXSARGS;
+	if (items != 3)
+		Perl_croak(aTHX_ "Usage: Client::IsTaskActivityActive(THIS, TaskID, ActivityID)");
+	{
+		Client *		THIS;
+		bool		RETVAL;
+		int		TaskID = (sint32)SvIV(ST(1));
+		int		ActivityID = (sint32)SvIV(ST(2));
+
+		if (sv_derived_from(ST(0), "Client")) {
+			IV tmp = SvIV((SV*)SvRV(ST(0)));
+			THIS = INT2PTR(Client *,tmp);
+		}
+		else
+			Perl_croak(aTHX_ "THIS is not of type Client");
+		if(THIS == NULL)
+			Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+		RETVAL = THIS->IsTaskActivityActive(TaskID, ActivityID);
+		ST(0) = boolSV(RETVAL);
+		sv_2mortal(ST(0));
+	}
+	XSRETURN(1);
+}
+
+XS(XS_Client_IsTaskActivityCompleted); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Client_IsTaskActivityCompleted)
+{
+	dXSARGS;
+	if (items != 3)
+		Perl_croak(aTHX_ "Usage: Client::IsTaskActivityCompleted(THIS, TaskID, ActivityID)");
+	{
+		Client *		THIS;
+		bool		RETVAL;
+		int		TaskID = (sint32)SvIV(ST(1));
+		int		ActivityID = (sint32)SvIV(ST(2));
+
+		if (sv_derived_from(ST(0), "Client")) {
+			IV tmp = SvIV((SV*)SvRV(ST(0)));
+			THIS = INT2PTR(Client *,tmp);
+		}
+		else
+			Perl_croak(aTHX_ "THIS is not of type Client");
+		if(THIS == NULL)
+			Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+		RETVAL = THIS->IsTaskActivityCompleted(TaskID, ActivityID);
+		ST(0) = boolSV(RETVAL);
+		sv_2mortal(ST(0));
+	}
+	XSRETURN(1);
+}
+
 #ifdef __cplusplus
 extern "C"
 #endif
@@ -5068,6 +5253,13 @@
 		newXSproto(strcpy(buf, "ClearCompassMark"), XS_Client_ClearCompassMark, file, "$");
 		newXSproto(strcpy(buf, "GetFreeSpellBookSlot"), XS_Client_GetFreeSpellBookSlot, file, "$;$");
 		newXSproto(strcpy(buf, "GetSpellBookSlotBySpellID"), XS_Client_GetSpellBookSlotBySpellID, file, "$$");
+		newXSproto(strcpy(buf, "UpdateTaskActivity"), XS_Client_UpdateTaskActivity, file, "$$$$");
+		newXSproto(strcpy(buf, "AssignTask"), XS_Client_AssignTask, file, "$$$");
+		newXSproto(strcpy(buf, "FailTask"), XS_Client_FailTask, file, "$$");
+		newXSproto(strcpy(buf, "IsTaskCompleted"), XS_Client_IsTaskCompleted, file, "$$");
+		newXSproto(strcpy(buf, "IsTaskActive"), XS_Client_IsTaskActive, file, "$$");
+		newXSproto(strcpy(buf, "IsTaskActivityActive"), XS_Client_IsTaskActivityActive, file, "$$$");
+		newXSproto(strcpy(buf, "IsTaskActivityCompleted"), XS_Client_IsTaskActivityCompleted, file, "$$$");
 	XSRETURN_YES;
 }
Perl Script, using Task ID 140

Code:
sub EVENT_SAY{	
	if($text=~/update/i){
		my @clients = $entity_list->GetClientList();
		foreach $ent (@clients){ 
			$ent->UpdateTaskActivity(140, 0, 1);
		}
	}
	if($text=~/assign/i){
		my @clients = $entity_list->GetClientList();
		foreach $ent (@clients){
			$ent->AssignTask(140, $npc->GetID());
		}
	}
	if($text=~/failtask/i){
		my @clients = $entity_list->GetClientList();
		foreach $ent (@clients){
			$ent->FailTask(140);
		}
	}
	if($text=~/taskcomplete/i){
		my @clients = $entity_list->GetClientList();
		foreach $ent (@clients){
			if($ent->IsTaskCompleted(140)){
				$ent->Message(15, "Task Complete");
			}
			else{
				$ent->Message(15, "Task not complete");
			}
		}
	}
	if($text=~/taskactive/i){
		my @clients = $entity_list->GetClientList();
		foreach $ent (@clients){
			if($ent->IsTaskActive(140)){
				$ent->Message(15, "Task Active");
			}
			else{
				$ent->Message(15, "Task not active");
			}
		}
	}
	if($text=~/taskactivityactive/i){
		my @clients = $entity_list->GetClientList();
		foreach $ent (@clients){
			if($ent->IsTaskActivityActive(140, 0)){
				$ent->Message(15, "Task activity Active");
			}
			else{
				$ent->Message(15, "Task activity not active");
			}
		}
	}
	if($text=~/taskactivitycomplete/i){
		my @clients = $entity_list->GetClientList();
		foreach $ent (@clients){
			if($ent->IsTaskActive(140, 0)){
				$ent->Message(15, "Task activity complete");
			}
			else{
				$ent->Message(15, "Task activity not complete");
			}
		}
	}
}
Reply With Quote
  #2  
Old 06-24-2011, 02:33 AM
Lillu
Hill Giant
 
Join Date: Sep 2008
Posts: 204
Default

That's very nice Akka. <3
__________________
Reply With Quote
  #3  
Old 06-24-2011, 10:49 PM
joligario's Avatar
joligario
Developer
 
Join Date: Mar 2003
Posts: 1,490
Default

With some slight changes, this is in r1953
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 12:22 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3