Esempio n. 1
0
void handle_spell_tic(QuestInterface *parse, lua_State* L, NPC* npc, Client* client, uint32 spell_id, uint32 extra_data,
						 std::vector<void*> *extra_pointers) {
	if(npc) {
		Lua_Mob l_npc(npc);
		luabind::adl::object l_npc_o = luabind::adl::object(L, l_npc);
		l_npc_o.push(L);
	} else if(client) {
		Lua_Mob l_client(client);
		luabind::adl::object l_client_o = luabind::adl::object(L, l_client);
		l_client_o.push(L);
	} else {
		Lua_Mob l_mob(nullptr);
		luabind::adl::object l_mob_o = luabind::adl::object(L, l_mob);
		l_mob_o.push(L);
	}

	lua_setfield(L, -2, "target");

	lua_pushinteger(L, *reinterpret_cast<int*>(extra_pointers->at(0)));
	lua_setfield(L, -2, "tics_remaining");

	lua_pushinteger(L, *reinterpret_cast<uint8*>(extra_pointers->at(1)));
	lua_setfield(L, -2, "caster_level");

	lua_pushinteger(L, *reinterpret_cast<int*>(extra_pointers->at(2)));
	lua_setfield(L, -2, "buff_slot");

	lua_pushinteger(L, extra_data);
	lua_setfield(L, -2, "caster_id");
}
Esempio n. 2
0
void handle_npc_event_trade(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data,
						  std::vector<void*> *extra_pointers) {
	Lua_Client l_client(reinterpret_cast<Client*>(init));
	luabind::adl::object l_client_o = luabind::adl::object(L, l_client);
	l_client_o.push(L);
	lua_setfield(L, -2, "other");
	
	lua_createtable(L, 0, 0);
	std::stringstream ident;
	ident << npc->GetNPCTypeID();
	
	if(extra_pointers) {
		for(size_t i = 0; i < extra_pointers->size(); ++i) {
			std::string prefix = "item" + std::to_string(static_cast<long long>(i + 1));
			Lua_ItemInst l_inst = reinterpret_cast<ItemInst*>(extra_pointers->at(i));
			luabind::adl::object l_inst_o = luabind::adl::object(L, l_inst);
			l_inst_o.push(L);

			lua_setfield(L, -2, prefix.c_str());
		}
	}

	lua_pushinteger(L, std::stoul(parse->GetVar("platinum." + ident.str())));
	lua_setfield(L, -2, "platinum");

	lua_pushinteger(L, std::stoul(parse->GetVar("gold." + ident.str())));
	lua_setfield(L, -2, "gold");

	lua_pushinteger(L, std::stoul(parse->GetVar("silver." + ident.str())));
	lua_setfield(L, -2, "silver");

	lua_pushinteger(L, std::stoul(parse->GetVar("copper." + ident.str())));
	lua_setfield(L, -2, "copper");
	lua_setfield(L, -2, "trade");
}
Esempio n. 3
0
void handle_player_duel_loss(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
							 std::vector<void*> *extra_pointers) {
	Lua_Client l_client(reinterpret_cast<Client*>(extra_pointers->at(0)));
	luabind::adl::object l_client_o = luabind::adl::object(L, l_client);
	l_client_o.push(L);
	lua_setfield(L, -2, "other");
}
Esempio n. 4
0
void handle_npc_single_client(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data,
						  std::vector<void*> *extra_pointers) {
	Lua_Client l_client(reinterpret_cast<Client*>(init));
	luabind::adl::object l_client_o = luabind::adl::object(L, l_client);
	l_client_o.push(L);
	lua_setfield(L, -2, "other");
}
Esempio n. 5
0
int LuaParser::_EventPlayer(std::string package_name, QuestEventID evt, Client *client, std::string data, uint32 extra_data,
							std::vector<void*> *extra_pointers, luabind::adl::object *l_func) {
	const char *sub_name = LuaEvents[evt];
	int start = lua_gettop(L);

	try {
		int npop = 1;
		if(l_func != nullptr) {
			l_func->push(L);
		} else {
			lua_getfield(L, LUA_REGISTRYINDEX, package_name.c_str());
			lua_getfield(L, -1, sub_name);
			npop = 2;
		}
	
		lua_createtable(L, 0, 0);
		//push self
		Lua_Client l_client(client);
		luabind::adl::object l_client_o = luabind::adl::object(L, l_client);
		l_client_o.push(L);
		lua_setfield(L, -2, "self");
		
		auto arg_function = PlayerArgumentDispatch[evt];
		arg_function(this, L, client, data, extra_data, extra_pointers);
	
		quest_manager.StartQuest(client, client, nullptr);
		if(lua_pcall(L, 1, 1, 0)) {
			std::string error = lua_tostring(L, -1);
			AddError(error);
			quest_manager.EndQuest();
			return 0;
		}
		quest_manager.EndQuest();
		
		if(lua_isnumber(L, -1)) {
			int ret = static_cast<int>(lua_tointeger(L, -1));
			lua_pop(L, npop);
			return ret;
		}
		
		lua_pop(L, npop);
	} catch(std::exception &ex) {
		std::string error = "Lua Exception: ";
		error += std::string(ex.what());
		AddError(error);

		//Restore our stack to the best of our ability
		int end = lua_gettop(L);
		int n = end - start;
		if(n > 0) {
			lua_pop(L, n);
		}
	}

	return 0;
}
Esempio n. 6
0
//NPC
void handle_npc_event_say(QuestInterface *parse, lua_State* L, NPC* npc, Mob *init, std::string data, uint32 extra_data,
						  std::vector<void*> *extra_pointers) {
	npc->DoQuestPause(init);

	Lua_Client l_client(reinterpret_cast<Client*>(init));
	luabind::adl::object l_client_o = luabind::adl::object(L, l_client);
	l_client_o.push(L);
	lua_setfield(L, -2, "other");

	lua_pushstring(L, data.c_str());
	lua_setfield(L, -2, "message");

	lua_pushinteger(L, extra_data);
	lua_setfield(L, -2, "language");
}
Esempio n. 7
0
void handle_translocate_finish(QuestInterface *parse, lua_State* L, NPC* npc, Client* client, uint32 spell_id, uint32 extra_data,
					   std::vector<void*> *extra_pointers) {
	if(npc) {
		Lua_Mob l_npc(npc);
		luabind::adl::object l_npc_o = luabind::adl::object(L, l_npc);
		l_npc_o.push(L);
	} else if(client) {
		Lua_Mob l_client(client);
		luabind::adl::object l_client_o = luabind::adl::object(L, l_client);
		l_client_o.push(L);
	} else {
		Lua_Mob l_mob(nullptr);
		luabind::adl::object l_mob_o = luabind::adl::object(L, l_mob);
		l_mob_o.push(L);
	}

	lua_setfield(L, -2, "target");
}
  void import(const std::string p_file_name,fichier_client_db & p_db)
  {
    ifstream l_input_file(p_file_name.c_str());
    if(!l_input_file.is_open())
      {
	cout << "ERROR : unable to open file \"" << p_file_name << "\"" << endl ;
	exit(-1);
      }

    string l_line = "";
    uint32_t l_line_nb = 0;
    vector<facture_status> l_result_facture_status;
    p_db.get_facture_status_by_name(facture_status::get_non_checked_status(),l_result_facture_status,true);
    assert(l_result_facture_status.size()==1);
    facture_status l_facture_status = l_result_facture_status[0];
    do
      {
	getline(l_input_file,l_line);
	++l_line_nb;
	if(l_line.find("INSERT INTO") != string::npos)
	  {
	    bool l_condition = true;
	    assert((l_condition ? true :(cout << "Message" << endl , false) ));

	    // Extract table name
	    size_t l_pos = l_line.find('`');
	    assert((l_pos != string::npos ? true :(cout << "Line " << l_line_nb << endl , false)));
	    string l_table_name = l_line.substr(l_pos+1,l_line.find('`',l_pos+1)-l_pos-1);
	    // Extract data
	    l_pos = l_line.find('(');
	    assert((l_pos != string::npos ? true :(cout << "Line " << l_line_nb << endl , false)));
	    string l_data = l_line.substr(l_pos+1,l_line.find(')',l_pos+1)-l_pos-1);

	    //Treat data
	    if(l_table_name == "achat")
	      {
		string l_result("");
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		uint32_t l_achat_id = strtol(remove_leading_space(l_result).c_str(),NULL,10);
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		uint32_t l_client_id = strtol(remove_leading_space(l_result).c_str(),NULL,10);
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		l_result = remove_leading_space(l_result);
		string l_date = l_result.substr(1,l_result.size()-2);
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		uint32_t l_marque_id = strtol(remove_leading_space(l_result).c_str(),NULL,10);
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		uint32_t l_type_id = strtol(remove_leading_space(l_result).c_str(),NULL,10);
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		l_result = remove_leading_space(l_result);
		string l_reference = l_result.substr(1,l_result.size()-2);
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		l_result = remove_leading_space(l_result);
		float l_prix_franc = strtof(l_result.substr(1,l_result.size()-2).c_str(),NULL);
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		l_result = remove_leading_space(l_result);
		float l_prix_euro = strtof(l_result.substr(1,l_result.size()-2).c_str(),NULL);
		l_result = remove_leading_space(l_data);
		bool l_garantie = (l_result.substr(1,l_result.size()-2)) != "non";


		// Search corresponding facture
		vector<facture> l_facture_result;
		p_db.get_by_date_and_client_id(l_date,l_client_id,l_facture_result);
		uint32_t l_facture_id = 0;

		if(l_facture_result.size()==0)
		  {
		    facture l_facture(0,l_client_id,l_date,0,l_facture_status.get_id(),0);
		    p_db.create(l_facture);
		    l_facture_id = l_facture.get_id();
		  }
		else if(l_facture_result.size() == 1)
		  {
		    l_facture_id = l_facture_result.front().get_id();
		  }
		else
		  {
		    cout << "ERROR : facture should be unique or not existing" << endl ;
		    exit(-1);
		  }
      
	      
		//		achat l_achat(l_achat_id,l_client_id,l_date,0,l_marque_id,l_type_id,l_reference,l_prix_franc,l_prix_euro,l_garantie);
		achat l_achat(l_achat_id,l_facture_id,l_marque_id,l_type_id,l_reference,l_prix_franc,l_prix_euro,l_garantie);
#ifdef DEBUG_IMPORT_ACHAT
		cout << "Achat_id = \"" << l_achat_id << "\"" << endl ;
		cout << "Facture_id = \"" << l_facture_id << "\"" << endl ;
		//		cout << "Client_id = \"" << l_client_id << "\"" << endl ;
		//		cout << "Date = \"" << l_date << "\"" << endl ;
		cout << "Marque_id = \"" << l_marque_id << "\"" << endl ;
		cout << "type_id = \"" << l_type_id << "\"" << endl ;
		cout << "Reference = \"" << l_reference << "\"" << endl ;
		cout << "Prix_Franc = \"" << l_prix_franc << "\"" << endl ;
		cout << "Prix_Euro = \"" << l_prix_euro << "\"" << endl ;
		cout << "Garantie = \"" << l_garantie << "\"" << endl ;
		cout << l_achat << endl ;
#endif
		p_db.create(l_achat);

	      }
	    else if(l_table_name == "client")
	      {
		string l_result("");
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		uint32_t l_client_id = strtol(remove_leading_space(l_result).c_str(),NULL,10);
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		l_result = remove_leading_space(l_result);
		string l_name = l_result.substr(1,l_result.size()-2);
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		l_result = remove_leading_space(l_result);
		string l_first_name = l_result.substr(1,l_result.size()-2);
		size_t l_pos = l_data.find("'");
		l_pos = l_data.find("'",l_pos+1);
		l_pos = l_data.find(",",l_pos);
		string l_address = remove_leading_space(l_data.substr(0,l_pos));
		l_data = l_data.substr(l_pos+1);
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		l_result = remove_leading_space(l_result);
		string l_tel = l_result.substr(1,l_result.size()-2);
		uint32_t l_ville_id = strtol(remove_leading_space(l_data).c_str(),NULL,10);

		client l_client(l_client_id,l_name,l_first_name,l_address,l_tel,l_ville_id);

#ifdef DEBUG_IMPORT_CLIENT
		cout << "Client_id = \"" << l_client_id << "\"" << endl ;	      
		cout << "Name = \"" << l_name << "\"" << endl ;	      
		cout << "First name = \"" << l_first_name << "\"" << endl ;	      
		cout << "Address = \"" << l_address << "\"" << endl ;
		cout << "Tel = \"" << l_tel << "\"" << endl ;
		cout << "Ville_id = \"" << l_ville_id << "\"" << endl ;
		cout << l_client;
#endif
		p_db.create(l_client);
	      
	      }
	    else if(l_table_name == "marque")
	      {
		string l_result("");
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		uint32_t l_marque_id = strtol(remove_leading_space(l_result).c_str(),NULL,10);
		l_result = remove_leading_space(l_data);
		string l_marque_name = l_result.substr(1,l_result.size()-2);	      
		marque l_marque(l_marque_id,l_marque_name);

#ifdef DEBUG_IMPORT_MARQUE
		cout << "l_marque_id =\"" << l_marque_id << "\"" << endl ;
		cout << "Marque = \"" << l_marque_name << "\"" << endl ;
		cout << l_marque << endl ;
#endif
		p_db.create(l_marque);

	      
	      }
	    else if(l_table_name == "type")
	      {
		string l_result("");
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		uint32_t l_type_id = strtol(remove_leading_space(l_result).c_str(),NULL,10);
		l_result = remove_leading_space(l_data);
		string l_type_name = l_result.substr(1,l_result.size()-2);	      

		type_achat l_type_achat(l_type_id,l_type_name);
#ifdef DEBUG_IMPORT_TYPE
		cout << "type id = \"" << l_type_id << "\"" << endl ;
		cout << "type name = \"" << l_type_name << "\"" << endl ;
		cout << l_type_achat << endl ;
#endif
		p_db.create(l_type_achat);
	      }
	    else if(l_table_name == "ville")
	      {
		cout << l_line << endl ;
		cout << "table : \"" << l_table_name << "\"" << endl ;
		cout << "data : \"" << l_data << "\"" << endl ;
		string l_result("");
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		uint32_t l_ville_id = strtol(remove_leading_space(l_result).c_str(),NULL,10);
		l_data = extract_until(l_data,',',l_result,l_line_nb);
		l_result = remove_leading_space(l_result);
		string l_ville_name = l_result.substr(1,l_result.size()-2);
		l_result = remove_leading_space(l_data);
		string l_postal_code = l_result.substr(1,l_result.size()-2);	      
 
		ville l_ville(l_ville_id,l_ville_name,l_postal_code);
#ifdef DEBUG_IMPORT_VILLE
		cout << "Ville id = \"" << l_ville_id << "\"" << endl ;
		cout << "Ville name = \"" << l_ville_name << "\"" << endl ;
		cout << "Postal code = \"" << l_postal_code << "\"" << endl ;
		cout << l_ville << endl ;
#endif
		p_db.create(l_ville);
	      }
	  

	  }
      }
    while(!l_input_file.eof() );

    l_input_file.close();

  }