Пример #1
0
bool js_leave_test(Room *room, Character *actor, int dir, JSBindable *self=0)
{
	std::shared_ptr< std::vector<JSTrigger*> > js_scripts;
	if( self ) {
		if (!self->js_scripts || self->js_scripts->size() == 0)
			return true;
		js_scripts = self->js_scripts;
	}
	else
		js_scripts = globalJS_Scripts;
	for (int i = 0; i < js_scripts->size(); ++i)
	{
		// this looks for scripts that _might_ match
		if (js_scripts->at(i)->isFlagged(JS::LEAVE))
		{
			JSTrigger* trig = js_scripts->at(i);

			if ( (!self || is_allowed(self, actor, trig)) && randomly_triggered(trig->narg))
			{
				int ret_val = JSManager::get()->execute(trig, self, actor, "", make_extra("direction", dir), room);
				if (!ret_val) // ret_val == 0 means we block them.
					return false;
			}
		}
	}
	return true;
}
Пример #2
0
void js_bribe_trigger(Character *self, Character *actor, const int amt)
{
    if (!self->js_scripts || self->js_scripts->size() == 0)
        return;
	if( self->IsPurged() || actor->IsPurged() )
		return;
	if( !IS_NPC(self) )
		return;
    for (int i = 0; i < self->js_scripts->size(); ++i)
    {
        if (self->js_scripts->at(i)->isFlagged(JS::MOB_BRIBE))
        {
            JSTrigger* trig = self->js_scripts->at(i);
        
            if (is_allowed(self, actor, trig) )
            {
                JSManager::get()->execute(trig, self, actor, "", make_extra("amount", amt));
            }
        }
    }
}
Пример #3
0
int js_object_receive_test(Character *actor, Object *obj, Character *receiver, JSBindable *self)
{
	int ret_val = 1;
	JSTrigger *trig;
	if( !self->js_scripts || self->js_scripts->empty() )
		return 1;
	for(int i = 0;i < self->js_scripts->size();i++)
	{
		if (self->js_scripts->at(i)->isFlagged(JS::CHARACTER_RECEIVE))
		{
			trig = self->js_scripts->at(i);
			if (randomly_triggered(trig->narg))
			{
				ret_val = JSManager::get()->execute(trig, self, actor, "", make_extra("obj", obj));

				if( ret_val == 0 )
					return ret_val;
			}
		}
	}
	return ret_val;
}
Пример #4
0
/*This script will go off when an item is dropped in a room*/
int js_dropped_in_room(Room *room, Object *obj, Character *actor)
{
	JSTrigger *trig;
	int ret_val = 1;

	if( !room->js_scripts || room->js_scripts->empty() )
		return 1;
	for(int i = 0;i < room->js_scripts->size();i++)
	{
		if (room->js_scripts->at(i)->isFlagged(JS::WORLD_DROP))
		{
			trig = room->js_scripts->at(i);
			if (randomly_triggered(trig->narg))
			{
				ret_val = JSManager::get()->execute(trig, room, actor, "", make_extra("obj", obj));

				if( ret_val == 0 )
					return ret_val;
			}
		}
	}
	return ret_val;
}
Пример #5
0
int js_object_removed(Character *actor, Object *obj, const int pos)
{
	JSTrigger *trig;
	int ret_val = 1;

	if( !obj->js_scripts || obj->js_scripts->empty() )
		return 1;
	for(int i = 0;i < obj->js_scripts->size();i++)
	{
		if (obj->js_scripts->at(i)->isFlagged(JS::OBJ_REMOVE))
		{
			trig = obj->js_scripts->at(i);
			if (randomly_triggered(trig->narg))
			{
				ret_val = JSManager::get()->execute(trig, obj, actor, "", make_extra("pos", pos));

				if( ret_val == 0 )
					return ret_val;
			}
		}
	}
	return ret_val;
}
Пример #6
0
bool playlist_view_cache::update_item(unsigned playlist, unsigned idx)
{
	bool rv = false;
	playlist_cache * p_cache = get_item(playlist);
	if (idx >= 0 && idx < p_cache->get_count())
	{
		column_list_cref_t columns = playlist_view::g_get_columns();
		const bit_array & p_mask = get_columns_mask(playlist);

		playlist_entry_ui * entry = p_cache->get_item(idx);

		static_api_ptr_t<playlist_manager> playlist_api;

		if (!entry) 
		{
			entry = new(std::nothrow) playlist_entry_ui; 
			if (!entry) return false;
			
			unsigned e=columns.get_count();
			entry->add_display_items(column_get_active_count(playlist));
			p_cache->replace_item(idx, entry);
		}

		bool date = cfg_playlist_date != 0;

		SYSTEMTIME st;
		if (date) GetLocalTime(&st);

		bool global = (cfg_global != 0);
		bool b_legacy = cfg_oldglobal != 0;

		global_variable_list p_vars;

		if (global)
		{
			make_extra(playlist, idx, p_vars, date ? &st : 0, b_legacy);
		}
	
		int s,e=columns.get_count(),i=0;
		pfc::string8_fast_aggressive colour,display,temp;
		colour.prealloc(512);
		display.prealloc(512);
		temp.prealloc(512);

		cui::colours::helper p_helper(appearance_client_pv_impl::g_guid);

		colourinfo colours_global(
			p_helper.get_colour(cui::colours::colour_text),
			p_helper.get_colour(cui::colours::colour_selection_text),
			p_helper.get_colour(cui::colours::colour_background),
			p_helper.get_colour(cui::colours::colour_selection_background),
			p_helper.get_colour(cui::colours::colour_inactive_selection_text),
			p_helper.get_colour(cui::colours::colour_inactive_selection_background)
			);

		service_ptr_t<titleformat_object> to_display;
		service_ptr_t<titleformat_object> to_colour;
		service_ptr_t<titleformat_object> to_global_style;

		bool colour_global_av = false;
		for (s=0;s<e;s++)
		{
			if (p_mask[s])
			{

				playlist_view::g_get_columns()[s]->get_to_display(to_display);
				//playlist_view::g_get_titleformat_object(s, STRING_DISPLAY, to_display);
				if (to_display.is_valid())
					playlist_api->playlist_item_format_title(playlist, idx, &titleformat_hook_splitter_pt3(global ? &titleformat_hook_set_global<false,true>(p_vars, b_legacy) :0, date ? &titleformat_hook_date(&st) : 0, &titleformat_hook_playlist_name()), display, to_display, 0, play_control::display_level_all);

				colourinfo col_item(
					p_helper.get_colour(cui::colours::colour_text),
					p_helper.get_colour(cui::colours::colour_selection_text),
					p_helper.get_colour(cui::colours::colour_background),
					p_helper.get_colour(cui::colours::colour_selection_background),
					p_helper.get_colour(cui::colours::colour_inactive_selection_text),
					p_helper.get_colour(cui::colours::colour_inactive_selection_background)
					);

				playlist_view::g_get_columns()[s]->get_to_colour(to_colour);
				//playlist_view::g_get_titleformat_object(s, STRING_COLOUR, to_colour);

				bool b_custom = columns[s]->use_custom_colour;

				if (!cfg_oldglobal || !b_custom)
				{
					if (!colour_global_av)
					{
						playlist_view::g_get_global_style_titleformat_object(to_global_style);
						if (to_global_style.is_valid())
							playlist_api->playlist_item_format_title(playlist, idx, 
								&titleformat_hook_splitter_pt3(&titleformat_hook_style(colours_global),global ? &titleformat_hook_set_global<false,true>(p_vars, b_legacy) : 0,date ? &titleformat_hook_date(&st) : 0, &titleformat_hook_playlist_name()), colour, to_global_style, 0, play_control::display_level_all);

						if (cfg_oldglobal && !colour.is_empty())
							process_colour_string(colour, colours_global);
						colour_global_av = true;
					}
					col_item = colours_global;
				}
				if (b_custom)
				{
					if (to_colour.is_valid())
						playlist_api->playlist_item_format_title(playlist, idx, 
							&titleformat_hook_splitter_pt3(&titleformat_hook_style(col_item),global ? &titleformat_hook_set_global<false,true>(p_vars, b_legacy) : 0,date ? &titleformat_hook_date(&st) : 0, &titleformat_hook_playlist_name()) 
							, colour, to_colour, 0, play_control::display_level_all);
					
					
					if (cfg_oldglobal && !colour.is_empty())
						process_colour_string(colour, col_item);
				}

				entry->set_display_item(i++, display, col_item);
			}


		}
		rv = true;
	}
	return rv;
}