Jump to content

Recommended Posts

Posted

Hi! im modifying this script to show damage on screen, when you use a normal hit or evade, blocked it works fine but i would like to show a Message "Magic Critical" or "Critical" when the player hits. Im confused and i dont understand where i need to edit the code. Does anybody hava a idea anda could give me a hand?.
THanks!

 

I share the code here. In advance i will add +exp gained too.

 

class OnScreenDmg extends UICommonAPI;

const REFRESH_TARGETS_NUMBER_TIMERID = 7777;

const START_1_TEXT_TIMERID = 1001;
const START_2_TEXT_TIMERID = 1002;
const START_3_TEXT_TIMERID = 1003;
const START_4_TEXT_TIMERID = 1004;

const MIDDLE_TEXT_TIMERID = 2000;
const MIDDLE_1_TEXT_TIMERID = 2001;
const MIDDLE_2_TEXT_TIMERID = 2002;
const MIDDLE_3_TEXT_TIMERID = 2003;
const MIDDLE_4_TEXT_TIMERID = 2004;
const MIDDLE_5_TEXT_TIMERID = 2005;
const MIDDLE_6_TEXT_TIMERID = 2006;
const MIDDLE_7_TEXT_TIMERID = 2007;
const MIDDLE_8_TEXT_TIMERID = 2008;
const MIDDLE_9_TEXT_TIMERID = 2009;
const MIDDLE_10_TEXT_TIMERID = 2010;
const MIDDLE_11_TEXT_TIMERID = 2011;
const MIDDLE_12_TEXT_TIMERID = 2012;

const FINISH_1_TEXT_TIMERID = 3001;
const FINISH_2_TEXT_TIMERID = 3002;
const FINISH_3_TEXT_TIMERID = 3003;
const FINISH_4_TEXT_TIMERID = 3004;
const FINISH_5_TEXT_TIMERID = 3005;
const FINISH_6_TEXT_TIMERID = 3006;
const FINISH_7_TEXT_TIMERID = 3007;
const FINISH_8_TEXT_TIMERID = 3008;

var WindowHandle Me;
//var TextBoxHandle MainDmg;
//var TextBoxHandle pText;

var TextBoxHandle txt_Damage[12];

//var TextBoxHandle txt_ClassicDamage1;
//var TextBoxHandle txt_ClassicDamage2;
//var TextBoxHandle txt_ClassicDamage3;
//var TextBoxHandle txt_ClassicDamage4;
//var TextBoxHandle txt_ClassicDamage5;
//var TextBoxHandle txt_ClassicDamage6;
//var TextBoxHandle txt_ClassicDamage7;
//var TextBoxHandle txt_ClassicDamage8;
var TextBoxHandle txt_Critical;
var TextBoxHandle txt_Multiplier;

var TextBoxHandle txt_Level;

var int WeapType;
var int reflectFilter;	// value to filter reflect damage
var int my_ID;
var int mypet_ID;
var int targetCount;
var int otherCount;

var int messagePosition;
var string  damageString[4];
var int  colorString[4];

var bool isAttackingDmg;
var int	freeTextPosition[8];
	//		freeTextPosition2,
	//		freeTextPosition3,
	//		freeTextPosition4;
var bool isCrit;
var bool showOSD;
var bool showMult;

var Color DefaultColor;
var Color Yellow;
var Color Red;

function OnLoad ()
{	
	local int temp;
	
	Me = GetWindowHandle("OnScreenDmg");
	
	for (temp = 0; temp < 12; temp++)
	{
		txt_Damage[temp] = GetTextBoxHandle("OnScreenDmg.txtDamage" $ temp);
	}

	txt_Critical = GetTextBoxHandle("OnScreenDmg.txtCritical");
	txt_Multiplier = GetTextBoxHandle("OnScreenDmg.txtMultiplier");
	
	txt_Level = GetTextBoxHandle("StatusWnd.txtLevel");
	
	DefaultColor.R = 216;
	DefaultColor.G = 216;
	DefaultColor.B = 216;
  
	Yellow.R = 255;
	Yellow.G = 225;
	Yellow.B = 73;
	
	Red.R = 255;
	Red.G = 153;
	Red.B = 153;
	
	showOSD = false;
	showMult = false;
	
	GetINIBool("WindowsCheks", "OnScreenDmg", temp, "PatchSettings");
	if (temp == 1)
	{
		showOSD = true;
	}

	GetINIBool("WindowsCheks", "Multiplier", temp, "PatchSettings");
	if (temp == 1)
	{
		showMult = true;
	}

	targetCount = 0;
	otherCount = 0;
	mypet_ID = -1;
	my_ID = -1;
	
//	txt_ClassicDamage1.SetAlpha(0);
	//txt_ClassicDamage2.SetAlpha(0);
	txt_Multiplier.SetAlpha(0);
	txt_Critical.SetAlpha(0);
	txt_Critical.HideWindow();
}


function OnRegisterEvent ()
{
	RegisterEvent(EV_UpdateUserInfo);
	RegisterEvent(EV_SystemMessage);
	RegisterEvent(EV_ReceiveMagicSkillUse);
	RegisterEvent(EV_ReceiveAttack);	
	RegisterEvent(EV_SummonedStatusShow);
	RegisterEvent(EV_PetStatusShow);
	RegisterEvent(EV_PetSummonedStatusClose);
}		

function OnEvent (int a_EventID, string a_Param)
{

	switch (a_EventID)
	{
		case EV_PetSummonedStatusClose:
			mypet_ID =-1;	
			break;
		case EV_UpdateUserInfo:
			if	(my_ID <= 0) my_ID = class'UIDATA_PLAYER'.static.GetPlayerID();
			reflectFilter = 5 + int(txt_Level.GetText());
			break;
		case EV_SummonedStatusShow:
			if (mypet_ID <= 0) mypet_ID = class'UIDATA_PET'.static.GetPetID();
			break;		
		case EV_PetStatusShow:
			if (mypet_ID <= 0) mypet_ID = class'UIDATA_PET'.static.GetPetID();
			break;
		case EV_SystemMessage:
			if (showOSD) HandleSystemMessage(a_Param);
			break;	
		case EV_ReceiveAttack:
			if (showOSD) AttackForDmg(a_Param);
			break;	
		case EV_ReceiveMagicSkillUse:
			if (showOSD) SkillCastForDmg(a_Param);
			break;				
	}
}

function OnEnterState( name a_PreStateName )
{
	local int i;
	
	if (a_PreStateName == 'LoadingState')
	{
			targetCount = 0;
			otherCount = 0;
			mypet_ID = -1;
			my_ID = -1;
			messagePosition = 0;
			
			for (i = 0; i < 8; i++)
				freeTextPosition[i] = 1;	
	}	
}

function SkillCastForDmg (string a_Param)
{
	local int AttackerID;
	local int SkillID;
	local int SkillLevel;
	local SkillInfo UsedSkill;

	ParseInt(a_Param,"AttackerID",AttackerID);
	if ((AttackerID != my_ID) && (AttackerID != mypet_ID)) return;
	
	ParseInt(a_Param,"SkillID",SkillID);	
	if (IsNotDisplaySkill(SkillID)) return;
	
	ParseInt(a_Param,"SkillLevel",SkillLevel);
	GetSkillInfo(SkillID, SkillLevel, UsedSkill);
	
	if ((my_ID == AttackerID && UsedSkill.IsMagic < 2 && (UsedSkill.OperateType == 0 || UsedSkill.OperateType == 1 || UsedSkill.OperateType == 3)) ||  (mypet_ID == AttackerID &&  UsedSkill.IsMagic == 1))
	{
	//	targetCount = 0;
		isAttackingDmg = false;
	}
}	
	

function AttackForDmg(string a_Param)
{
	local int AttackerID;

	ParseInt(a_Param,"AttackerID",AttackerID);	

	if (my_ID != AttackerID) return;
	else isAttackingDmg = true;	
}


function ShowOnScreenDamage (string textDamage, int textOrder, int textColor)
{
	local int userX;
	local int userY;
	local color Color;
	
	textDamage = textDamage $ " "; // obrezaetsya inogda

	GetCurrentResolution(userX, userY);

	switch (textColor)
	{
		case 0:
			Color = DefaultColor;
			break;
			
		case 1:
	//		txt_Critical.MoveTo(userX/2 + 65 , userY/2 - 50);
	//		txt_Critical.SetAlpha(255);
	//		txt_Critical.SetAlpha(0, 0.6f);			
			Color = Yellow;
			break;
			
		case 2:
			Color = Red;
			break;
	}

	txt_Damage[textOrder - 1].SetAlpha(0);
	txt_Damage[textOrder - 1].SetTextColor(Color);
		
	switch (textOrder)
	{
		case 1:
		case 5:
		case 9:
			txt_Damage[textOrder - 1].MoveTo(userX/2  - 110, userY/2 - 100);
			break;

		case 2:
		case 6:
		case 10:
			txt_Damage[textOrder - 1].MoveTo(userX/2 + 10, userY/2 - 100);
			break;
				
		case 3:
		case 7:
		case 11:
			txt_Damage[textOrder - 1].MoveTo(userX/2 - 50, userY/2 - 125);
			break;
				
		case 4:
		case 8:
		case 12:
			txt_Damage[textOrder - 1].MoveTo(userX/2 + 70, userY/2 - 125);
			break;			
	}
	
	txt_Damage[textOrder - 1].SetText(textDamage);
	txt_Damage[textOrder - 1].Move(0, -100, 1.0f);
	txt_Damage[textOrder - 1].SetAlpha(255);
	txt_Damage[textOrder - 1].SetAlpha(0, 1.0f);	
	Me.SetTimer(MIDDLE_TEXT_TIMERID + textOrder, 400);

}


function ShowMultiplier()
{
	local string DmgNum;
	local int resultCount;
	
	resultCount = targetCount - otherCount;
	
	if (resultCount > 1 && showMult)
	{		
		if (isAttackingDmg)
		{
			if (WeapType != 4)
				DmgNum = "";
			else	
				DmgNum="x" $ resultCount $ " ";	
		}
		else
			DmgNum="x" $ resultCount $ " ";	

		if (Len(DmgNum) > 0)
		{
			txt_Multiplier.SetText(DmgNum);
			txt_Multiplier.SetAlpha(255);
			txt_Multiplier.SetAlpha(0, 1.3f);
		}
	}	
}

function OnTimer(int TimerID)
{
	local int currentTextBlock;		// 1-4 or 4-8 textbox
	
	switch (TimerID)
	{	
		case REFRESH_TARGETS_NUMBER_TIMERID:
			ShowMultiplier();
			targetCount = 0;
			otherCount = 0;
			isCrit = false;
			Me.KillTimer(REFRESH_TARGETS_NUMBER_TIMERID);
			break;

		case START_1_TEXT_TIMERID:
		case START_2_TEXT_TIMERID:
		case START_3_TEXT_TIMERID:
		case START_4_TEXT_TIMERID:
			Me.KillTimer(TimerID);
			if (freeTextPosition[TimerID - 1001] == 1)
			{
				currentTextBlock = 0;
				freeTextPosition[TimerID - 1001] = 0;
			}
			else
			{
				if (freeTextPosition[TimerID - 1001 + 4] == 1)
				{
					currentTextBlock = 4;
					freeTextPosition[TimerID - 1001 + 4] = 0;
				}
				else
				{
					currentTextBlock = 8;
				}
			
			}
			ShowOnScreenDamage(damageString[TimerID - 1001], TimerID - 1000 + currentTextBlock, colorString[TimerID - 1001]);
			break;
		
		case MIDDLE_1_TEXT_TIMERID:
		case MIDDLE_2_TEXT_TIMERID:
		case MIDDLE_3_TEXT_TIMERID:
		case MIDDLE_4_TEXT_TIMERID:
		case MIDDLE_5_TEXT_TIMERID:
		case MIDDLE_6_TEXT_TIMERID:
		case MIDDLE_7_TEXT_TIMERID:
		case MIDDLE_8_TEXT_TIMERID:

			Me.KillTimer(TimerID);	
			Me.SetTimer(TimerID + 1000, 400);
			txt_Damage[TimerID - MIDDLE_TEXT_TIMERID - 1].SetAlpha(0, 0.5f);
			txt_Damage[TimerID - MIDDLE_TEXT_TIMERID - 1].Move(0, -100, 0.4f);					
			break;
			
		case MIDDLE_9_TEXT_TIMERID:
		case MIDDLE_10_TEXT_TIMERID:
		case MIDDLE_11_TEXT_TIMERID:
		case MIDDLE_12_TEXT_TIMERID:
			Me.KillTimer(TimerID);	
			txt_Damage[TimerID - MIDDLE_TEXT_TIMERID - 1].SetAlpha(0, 0.5f);
			txt_Damage[TimerID - MIDDLE_TEXT_TIMERID - 1].Move(0, -100, 0.4f);					
			break;
			
		case FINISH_1_TEXT_TIMERID:
		case FINISH_2_TEXT_TIMERID:
		case FINISH_3_TEXT_TIMERID:
		case FINISH_4_TEXT_TIMERID:
		case FINISH_5_TEXT_TIMERID:
		case FINISH_6_TEXT_TIMERID:
		case FINISH_7_TEXT_TIMERID:
		case FINISH_8_TEXT_TIMERID:
			Me.KillTimer(TimerID);
			freeTextPosition[TimerID - 3001] = 1;
			break;
	}
}

function HandleSystemMessage (string a_Param)
{
	local int summonDamage;
	local int playerDamage;
	local int SystemMsgIndex;
  
	ParseInt(a_Param,"Index",SystemMsgIndex);
  
	switch (SystemMsgIndex)
	{
		///////////////////////// crit message
		case 1280:
		case 2266:
			if (targetCount < 5)
				isCrit = true;
			break;
		
		case 2261:		///////////////////////// single hit
		case 2281:		///////////////////////// transfer paint hit
		case 2265:		///////////////////////// evaded hit message
		case 1996:		///////////////////////// blocked hit message
		case 139:		///////////////////////// resist message
		
			if (targetCount == 0)
			{
				Me.SetTimer(REFRESH_TARGETS_NUMBER_TIMERID, 300);		
			}				
			
			if (SystemMsgIndex == 2261 || SystemMsgIndex == 2281)
				ParseInt(a_Param,"Param3", playerDamage);
			
			if ((playerDamage > reflectFilter) || SystemMsgIndex == 1996 || SystemMsgIndex == 2265 || SystemMsgIndex == 139)
			{
				targetCount++;
				if (targetCount < 5)
				{
					messagePosition++;
					if (messagePosition > 3) messagePosition = 0;
					
					switch (SystemMsgIndex)
					{
						case 2261:
							damageString[messagePosition] = string(playerDamage);
							if (isCrit)
							{
								colorString[messagePosition] = 1;
								isCrit = false;
							}
							else
							{
								colorString[messagePosition] = 0;	
							}
							break;
						
						case 2281:
							ParseInt(a_Param,"Param4", summonDamage);
							damageString[messagePosition] = string(playerDamage) $  " + "  $ string(summonDamage);
							if (isCrit)
							{
								colorString[messagePosition] = 1;
								isCrit = false;
							}
							else
							{
								colorString[messagePosition] = 0;	
							}
							break;
							
						case 1996:
							damageString[messagePosition] = "Blocked";
							colorString[messagePosition] = 2;
							break;
							
						case 2265:
							damageString[messagePosition] = "Evaded";
							colorString[messagePosition] = 2;
							break;

						case 139:
							damageString[messagePosition] = "Resisted";
							colorString[messagePosition] = 2;
							break;
					}
					Me.SetTimer(START_1_TEXT_TIMERID + messagePosition, 100);
				}
				
				if (SystemMsgIndex == 1996 || SystemMsgIndex == 2265 || SystemMsgIndex == 139) otherCount++;
			}
			break;
	}
}
defaultproperties
{
}

 

  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

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.



×
×
  • Create New...