Jump to content
Sign in to follow this  
[D]ELARO ✓

Give Basic Weapon por Source

Recommended Posts

Buenas gente ya hace un tiempo no comparto nada, mientras trabajaba una base totalmente limpia me puse a la tarea de buscar el give basic weapon por source pero lamentablemente no lo encontré en ni un lado así que me di a la tarea de extraerlo de mi servidor e implementarlo a la base nueva, a mi me funciono sin ningún tipo de problema así que sera lo mismo para ustedes si siguen correctamente los pasos.

DE QUE VA EL GIVE BASIC WEAPON POR SOURSE? DE AL INICIAR UN PJ NUEVO SE TE DA TU ARMA, ARMADURA Y ACCESORIOS YA PUESTOS Y CON BONUS YA AÑADIDOS,

ADEMAS ES PARA TODAS LAS RAZAS INCLUYENDO AL LICANO.

ESTE ES EL CÓDIGO SOURCE PARA EL SERVIDOR, PUEDEN MODIFICAR LOS BONUS QUE APARECERAN EN CADA ACCESORIO A SU GUSTO, AHORA SOLO SIGAN LAS INSTRUCCIONES.

//service.h añadir

#define ENABLE_GIVE_BASIC_WEAPON

//char.cpp buscar void CHARACTER::SetEmpire(BYTE bEmpire) y pegar antes:

#ifdef ENABLE_GIVE_BASIC_WEAPON
void CHARACTER::addbonus(LPCHARACTER ch)
{
	BYTE job = ch->GetJob();
	LPITEM item;


	switch (job)
	{
	case JOB_WARRIOR:
	case JOB_ASSASSIN:
	case JOB_SURA:
	case JOB_SHAMAN:
	case JOB_WOLFMAN:
		{
			//  -- bonus de casco
			item = ch->GetWear(WEAR_HEAD);
			if (item != NULL)
			{
				item->ClearAttribute();
				item->SetForceAttribute( 0, APPLY_ATTBONUS_UNDEAD, 20);
				item->SetForceAttribute( 1, APPLY_ATTBONUS_ANIMAL, 20);
				item->SetForceAttribute( 2, APPLY_ATTBONUS_ORC, 20);
				item->SetForceAttribute( 3, APPLY_ATTBONUS_MILGYO, 20);
				item->SetForceAttribute( 4, APPLY_ATTBONUS_DEVIL, 20);
			}
			// -- bonus de arma
			item = ch->GetWear(WEAR_WEAPON);
			if (item != NULL)
			{
				item->ClearAttribute();
				item->SetForceAttribute( 0, APPLY_STR, 12);
				item->SetForceAttribute( 1, APPLY_CRITICAL_PCT, 10);
				item->SetForceAttribute( 2, APPLY_ATTBONUS_UNDEAD, 20);
				item->SetForceAttribute( 3, APPLY_ATTBONUS_ANIMAL, 20);
				item->SetForceAttribute( 4, APPLY_ATTBONUS_ORC, 20);
			}
			// -- bonus de escudo
			item = ch->GetWear(WEAR_SHIELD);
			if (item != NULL)
			{
				item->ClearAttribute();
				item->SetForceAttribute( 0, APPLY_STR, 12);
				item->SetForceAttribute( 1, APPLY_IMMUNE_STUN, 1);
				item->SetForceAttribute( 2, APPLY_BLOCK, 15);
				item->SetForceAttribute( 3, APPLY_GOLD_DOUBLE_BONUS, 20);
				item->SetForceAttribute( 4, APPLY_EXP_DOUBLE_BONUS, 20);
			}
			//  -- bonus de armadura
			item = ch->GetWear(WEAR_BODY);
			if (item != NULL)
			{
				item->ClearAttribute();
				item->SetForceAttribute( 0, APPLY_MAX_HP, 2000);
				item->SetForceAttribute( 1, APPLY_RESIST_BOW, 15);
				item->SetForceAttribute( 2, APPLY_RESIST_FIRE, 15);
				item->SetForceAttribute( 3, APPLY_RESIST_MAGIC, 15);
				item->SetForceAttribute( 4, APPLY_ATT_GRADE_BONUS, 50);
			}
			//  -- bonus de zapato
			item = ch->GetWear(WEAR_FOOTS);
			if (item != NULL)
			{
				item->ClearAttribute();
				item->SetForceAttribute( 0, APPLY_MAX_HP, 2000);
				item->SetForceAttribute( 1, APPLY_CRITICAL_PCT, 10);
				item->SetForceAttribute( 2, APPLY_GOLD_DOUBLE_BONUS, 20);
				item->SetForceAttribute( 3, APPLY_EXP_DOUBLE_BONUS, 20);
				item->SetForceAttribute( 4, APPLY_RESIST_BOW, 15);
			}
			//  -- bonus de brazalete
			item = ch->GetWear(WEAR_WRIST);
			if (item != NULL)
			{
				item->ClearAttribute();
				item->SetForceAttribute( 0, APPLY_MAX_HP, 2000);
				item->SetForceAttribute( 1, APPLY_PENETRATE_PCT, 10);
				item->SetForceAttribute( 2, APPLY_ITEM_DROP_BONUS, 20);
				item->SetForceAttribute( 3, APPLY_ATTBONUS_ORC, 20);
				item->SetForceAttribute( 4, APPLY_RESIST_MAGIC, 15);
			}
			//  -- bonus de collar
			item = ch->GetWear(WEAR_NECK);
			if (item != NULL)
			{
				item->ClearAttribute();
				item->SetForceAttribute( 0, APPLY_MAX_HP, 2000);
				item->SetForceAttribute( 1, APPLY_CRITICAL_PCT, 10);
				item->SetForceAttribute( 2, APPLY_GOLD_DOUBLE_BONUS, 20);
				item->SetForceAttribute( 3, APPLY_EXP_DOUBLE_BONUS, 20);
				item->SetForceAttribute( 4, APPLY_RESIST_BOW, 15);
			}
			//  -- bonus de pendiente
			item = ch->GetWear(WEAR_EAR);
			if (item != NULL)
			{
				item->ClearAttribute();
				item->SetForceAttribute( 0, APPLY_ATTBONUS_UNDEAD, 20);
				item->SetForceAttribute( 1, APPLY_ATTBONUS_ORC, 20);
				item->SetForceAttribute( 2, APPLY_ATTBONUS_ANIMAL, 20);
				item->SetForceAttribute( 3, APPLY_RESIST_BOW, 15);
				item->SetForceAttribute( 4, APPLY_ITEM_DROP_BONUS, 20);
			}
		}
		break;
	}
	ch->ComputePoints();
	ch->PointChange(POINT_HP, ch->GetMaxHP() - ch->GetHP());
	ch->PointChange(POINT_SP, ch->GetMaxSP() - ch->GetSP());
	ch->Save();
}

void CHARACTER::additems(LPCHARACTER ch)
{
	BYTE job = ch->GetJob();
	LPITEM item;
	for (int i = 0; i < 6; i++)
	{
		item = ch->GetWear(i);
		if (item != NULL)
			ch->UnequipItem(item);
	}
	item = ch->GetWear(WEAR_SHIELD);
	if (item != NULL)
		ch->UnequipItem(item);

	switch (job)
	{
	//sura
	case JOB_SURA:
		{
	  
			item = ITEM_MANAGER::instance().CreateItem(19 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(11609 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(12489 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(13009);
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(14009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(15009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(16009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(17009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
		}
		break;
		//guerrero
	case JOB_WARRIOR:
		{
	  
			item = ITEM_MANAGER::instance().CreateItem(19 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(11209 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(12209 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(13009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(14009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(15009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(16009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(17009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
		}
		break;
		//chaman
	case JOB_SHAMAN:
		{
	  
			item = ITEM_MANAGER::instance().CreateItem(7009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(11809 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(12629 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(13009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(14009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(15009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(16009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(17009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
		}
		break;
		//ninja
	case JOB_ASSASSIN:
		{
			item = ITEM_MANAGER::instance().CreateItem(19 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(11409 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(12349 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(13009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(14009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(15009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(16009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(17009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
		}
		break;
		//licano
	case JOB_WOLFMAN:
		{
			item = ITEM_MANAGER::instance().CreateItem(6009);
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(21009);
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(21509 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(13009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(14009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(15009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(16009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
			item = ITEM_MANAGER::instance().CreateItem(17009 );
			if (!item || !item->EquipTo(ch, item->FindEquipCell(ch)))
				M2_DESTROY_ITEM(item);
		}
		break;	
	}
}
#endif

//char.h buscar BYTE GetGMLevel() const; y pegar antes de esa linea entre void SetLevel(BYTE level);

#ifdef ENABLE_GIVE_BASIC_WEAPON
		void			addbonus(LPCHARACTER ch);
		void			additems(LPCHARACTER ch);
#endif

//questlua_pc.cpp buscar esta casi al inicio y pegar despues de:

namespace quest
{
	//
	// "pc" Lua functions
	//

#ifdef ENABLE_GIVE_BASIC_WEAPON
	int pc_addbonus(lua_State* L)
	{
		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
		if(ch)
			ch->addbonus(ch);
		return 0;
	}
	int pc_additems(lua_State* L)
	{
		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
		if(ch)
			ch->additems(ch);
		return 0;
	}
#endif	

// y buscar { NULL,			NULL			} y pegar antes

#ifdef ENABLE_GIVE_BASIC_WEAPON
			{"addbonus",			pc_addbonus		},
			{"additems",			pc_additems		},
#endif

ESTE ES LA QUEST NECESARIA PARA QUE FUNCIONE CORRECTAMENTE, NO CREO NECESARIO ENSEÑARLES A METER UNA QUEST SI ES ASÍ OLVIDA LO DE METER EL SOURCE XD

quest give_basic_weapon begin
	state start begin
		when login with pc.getqf("login_weapon") == 0 begin
		function character()
			local character = {'Warrior ','Ninja ','Sura ','Shaman ','Lycan '}
			return character[pc.get_job()+1]
		end	
		function empire_list()
			local empire_list = {'Shinsoo','Chunjo','Jinno'}
			return empire_list[pc.get_empire()]
		end	
		function gender()
			local gender = {'male','female'}
			return gender[pc.get_sex()+1]
		end
		pc.change_gold(500000) --Yang que regalas al inicio
		say("")
		say("")
		say("")
		say("")
		say_item_vnum(50187) --Con esto solo te dice la quest que recibiste cofre de aprendiz
		pc.give_item2("50187",1) --Cofre de Aprendiz Lv1
		pc . additems( )
		pc . addbonus( )
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.advance()
		horse.summon()
		horse.ride()
		notice_all(pc.get_name().." es un nuevo jugador en KraizySama!")
		set_state(__COMPLETE__)
		end
	end	
	
	state __COMPLETE__ begin
	end
end

Agregar las funciones nuevas en quest_funtions en tu carpeta quest de tus files.

character
empire_list
gender
pc.addbonus
pc.additems

BUENO LO DE EL BAÚL DE APRENDIZ (50187) USTEDES AGREGUEN LAS COSAS QUE QUIERAN A SU GUSTO MODIFICANDO O AÑADIENDO EN SPECIAL_ITEM_GROUP.TXT EN SU SHARE/LOCALE/GERMANY O LO QUE TENGAN DE SU SERVIDOR.

PRUEBAS DE QUE VA CORRECTAMENTE, DE IGUAL MANERA SIEMPRE HAGAN BACKUP CUANDO SE TRATA DE MODIFICAR SOURCE :v

1234

 

BUENO ESO ES TODO ESPERO LES SIRVA, SI LO COMPARTEN EN OTROS FOROS MÍNIMO DEJEN EL CREDITO EL ALEJANDO2020 COF* COF* XD OK ES TODO, INTENTARE AYUDAR SI OBTIENEN PROBLEMAS, PERO NO TENDRÍAN NINGUNO YO MISMO SEGUÍ MI PROPIA GUÍA Y ME FUE PERFECTO AL PRIMER INTENTO YA QUE NO ES NADA COMPLICADO.

FELIZ NAVIDAD ATRASADA Y FELIZ AÑO NUEVO PRROS!

FELIZ NAVIDAD 2021 :v y Tema Actualizado.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...