Beispiel #1
0
void test_trap_running(void *data) {
	(void)data;
	void * SOHandle;
	void * bartlby_address;
	struct shm_header * shm_hdr;
	struct trap * map;
	int x;
	int res;
	
	int (*AddTrap)(struct trap *, char *);
	int (*DeleteTrap)(long trap_id, char *);
		

	int rtc=-1;
	long lrtc=-1;
	long object_id=-1;

	bartlby_address=NULL;
	SOHandle=NULL;
	SKIP_IF_NOT_RUNNING(CONFIG);

	SOHandle = bartlby_get_sohandle(CONFIG);
	bartlby_address=bartlby_get_shm(CONFIG);

	
	tt_ptr_op(bartlby_address, !=, NULL);
	tt_ptr_op(SOHandle, !=, NULL);
	
	
	/// ADD trap

	LOAD_SYMBOL_TEST(AddTrap,SOHandle, "AddTrap");
	LOAD_SYMBOL_TEST(DeleteTrap,SOHandle, "DeleteTrap");


	lrtc=AddTrap(&dummy_trap, CONFIG);
	object_id=lrtc;
	tt_int_op(lrtc, >, 0);
	
	TT_DECLARE("INFO",("... Added Trap id: %ld", object_id));

	dummy_trap.trap_id=object_id;
	
	//Reload - and detach/reattach to shm
	shm_hdr=bartlby_SHM_GetHDR(bartlby_address);
	shm_hdr->do_reload=1;
	shmdt(bartlby_address);
	sleep(2);
	

	bartlby_address=bartlby_get_shm(CONFIG);

	shm_hdr=bartlby_SHM_GetHDR(bartlby_address);

	TT_DECLARE("INFO", ("Reloaded SHM"));
	tt_int_op(shm_hdr->do_reload, ==, 0);

	map = bartlby_SHM_TrapMap(bartlby_address);

	res = -1;
	for(x=0; x<shm_hdr->trapcount; x++) {
		
		if(map[x].trap_id == object_id) {
			res = 1;
			break;
		}
	}


	rtc=DeleteTrap(object_id, CONFIG);
	tt_int_op(rtc, ==, 1);

	TT_DECLARE("INFO",("... Delete Trap  ", object_id));



	tt_int_op(res, ==, 1);
	TT_DECLARE("INFO",("... SHM Trap found  ", object_id));



	end:
		if(SOHandle != NULL) dlclose(SOHandle);
		if(bartlby_address != NULL) shmdt(bartlby_address);
	;


}
Beispiel #2
0
/// TEST FUNCTIONS
void test_trap_lib(void *data) {
	(void)data;
	void * SOHandle;
	void * bartlby_address;


	struct trap modified_object;
	struct trap returned_object;


	struct trap * srvmap;
	
	srvmap=NULL;
	long (*AddTrap)(struct trap *, char *);
	int (*UpdateTrap)(struct trap *, char *);
	int (*DeleteTrap)(long trap_id, char *);
	int (*GetTrapById)(long, struct trap *, char * );
	long (*TrapChangeId)(long, long, char*);
	int (*GetTrapMap)(struct trap*, char*, int);
	


	int rtc=-1;
	long object_id=-1;
	long lrtc=-1;
	long NN=-1;
	int x;
	struct shm_header * shm_hdr;

	
	bartlby_address=NULL;
	SOHandle=NULL;
	SKIP_IF_NOT_RUNNING(CONFIG);

	SOHandle = bartlby_get_sohandle(CONFIG);
	bartlby_address=bartlby_get_shm(CONFIG);

	
	tt_ptr_op(bartlby_address, !=, NULL);
	tt_ptr_op(SOHandle, !=, NULL);
	
	shm_hdr = bartlby_SHM_GetHDR(bartlby_address);

	
	LOAD_SYMBOL_TEST(AddTrap,SOHandle, "AddTrap");
	LOAD_SYMBOL_TEST(DeleteTrap,SOHandle, "DeleteTrap");
	LOAD_SYMBOL_TEST(UpdateTrap,SOHandle, "UpdateTrap");	
	LOAD_SYMBOL_TEST(GetTrapById,SOHandle, "GetTrapById");	
	LOAD_SYMBOL_TEST(TrapChangeId,SOHandle, "TrapChangeId");	
	LOAD_SYMBOL_TEST(GetTrapMap,SOHandle, "GetTrapMap");	
	
	


	/******* ADD TRAP ****/
	lrtc=AddTrap(&dummy_trap, CONFIG);
	object_id=lrtc;
	tt_int_op(lrtc, >, 0);
	TT_DECLARE("INFO",("... Added Trap id: %ld", object_id));
	/******* ADD TRAP ****/


	/******* MODIFY TRAP ****/
	dummy_trap.trap_id=object_id;
	memcpy(&modified_object,&dummy_trap, sizeof(struct trap));
	memcpy(&returned_object,&dummy_trap, sizeof(struct trap));
	snprintf(modified_object.trap_catcher,2048, "modified-unit-test");
	rtc=UpdateTrap(&modified_object, CONFIG);
	tt_int_op(rtc, ==, 1);
	TT_DECLARE("INFO",("... Modified Trap, changed name"));
	/******* MODIFY TRAP ****/

	/******* GETTRAPBYID ****/
	rtc=GetTrapById(object_id, &returned_object, CONFIG);
	tt_int_op(rtc, ==, 0);
	tt_str_op(returned_object.trap_catcher, ==, modified_object.trap_catcher);
	TT_DECLARE("INFO",("... get trap by id  %ld", object_id));
	/******* GETTRAPBYID ****/

	/******* TRAPCHANGEID ****/
	NN=lrtc+999;
	object_id=TrapChangeId(lrtc, NN, CONFIG);
	tt_int_op(object_id, ==, NN);
	TT_DECLARE("INFO",("... Changed trap id from %ld to %ld ",lrtc, object_id));
	/******* TRAPCHANGEID ****/


	


	/*** TRAPMAP **/
	srvmap = malloc(sizeof(struct trap)*(shm_hdr->trapcount+2));
	rtc=GetTrapMap(srvmap, CONFIG, TEST_ORCH_ID);
	tt_int_op(rtc, >, 0);
	lrtc=-1;
	for(x=0; x<rtc; x++) {
		if(srvmap[x].trap_id==object_id) {
			lrtc = 1;
		}
	}
	tt_int_op(lrtc, ==, 1);
	TT_DECLARE("INFO",("... Created TrapMap and found  %ld ", object_id));
	/*** TRAPMAP **/






	/*** DELETETRAP **/
	rtc=DeleteTrap(object_id, CONFIG);
	tt_int_op(rtc, ==, 1);
	TT_DECLARE("INFO",("... Delete Trap  %ld ", object_id));
	/*** DELETETRAP **/
	




	end:
		if(srvmap != NULL) free(srvmap);
		if(SOHandle != NULL) dlclose(SOHandle);
		if(bartlby_address != NULL) shmdt(bartlby_address);
	
	;


}
Beispiel #3
0
// This creates an aura from a casted spell
void Mob::MakeAura(uint16 spell_id)
{
	// TODO: verify room in AuraMgr
	if (!IsValidSpell(spell_id))
		return;

	AuraRecord record;
	if (!database.GetAuraEntry(spell_id, record)) {
		Message(13, "Unable to find data for aura %s", spells[spell_id].name);
		Log(Logs::General, Logs::Error, "Unable to find data for aura %d, check auras table.", spell_id);
		return;
	}

	if (!IsValidSpell(record.spell_id)) {
		Message(13, "Casted spell (%d) is not valid for aura %s", record.spell_id, spells[spell_id].name);
		Log(Logs::General, Logs::Error, "Casted spell (%d) is not valid for aura %d, check auras table.",
		    record.spell_id, spell_id);
		return;
	}

	if (record.aura_type > static_cast<int>(AuraType::Max)) {
		return; // TODO: log
	}

	bool trap = false;

	switch (static_cast<AuraType>(record.aura_type)) {
	case AuraType::ExitTrap:
	case AuraType::EnterTrap:
	case AuraType::Totem:
		trap = true;
		break;
	default:
		trap = false;
		break;
	}

	if (!CanSpawnAura(trap))
		return;

	const auto base = database.LoadNPCTypesData(record.npc_type);
	if (base == nullptr) {
		Message(13, "Unable to load NPC data for aura %s", spells[spell_id].teleport_zone);
		Log(Logs::General, Logs::Error,
		    "Unable to load NPC data for aura %s (NPC ID %d), check auras and npc_types tables.",
		    spells[spell_id].teleport_zone, record.npc_type);
		return;
	}

	auto npc_type = new NPCType;
	memcpy(npc_type, base, sizeof(NPCType));

	strn0cpy(npc_type->name, record.name, 64);

	auto npc = new Aura(npc_type, this, record);
	npc->SetAuraID(spell_id);
	if (trap)
		npc->TryMoveAlong(5.0f, 0.0f, false); // try to place 5 units in front
	entity_list.AddNPC(npc, false);

	if (trap)
		AddTrap(npc, record);
	else
		AddAura(npc, record);
}