Jump to content
Endymion

[HowTo]Opponent's HP and MP during pvp

Recommended Posts

Hi.
pi-lbrxjxwgupeesjfuctcl.jpg

And now tutorial how add it into client:

You must add following code to costinfo.py

INPUT_IGNORE = 0

VID = 0
STHX = 0
HPXD = 0

PLAYER_HP = 0
PLAYER_MAX_HP = 0
PLAYER_SP = 0
PLAYER_MAX_SP = 0
PLAYER_NAME = ""

Next, open game.py, and add these things:

import uiHealth
			
			#wskaznikiHP
			"super_quest"				: self.Tabulejtor,
			"pvp_zdruwko"				: self.Mozart,
			
			#inputpowerdziwko
			"get_input_value"				: self.GetInputValue,
			"get_input_start"				: self.GetInputOn,
			"get_input_end"					: self.GetInputOff,

def Mozart(self, data):
		dane = data.split("|")
		constInfo.PLAYER_NAME = str(dane[0])
		constInfo.PLAYER_HP = int(dane[1])
		constInfo.PLAYER_MAX_HP = int(dane[2])
		constInfo.PLAYER_SP = int(dane[3])
		constInfo.PLAYER_MAX_SP = int(dane[4])

def Tabulejtor(self, id):
		constInfo.STHX = int(id)
			
	def GetInputOn(self):
		constInfo.INPUT_IGNORE = 1
		
	def GetInputOff(self):
		constInfo.INPUT_IGNORE = 0
			
	def GetInputValue(self):
		net.SendQuestInputStringPacket(str(constInfo.VID))

def OpenQuestWindow(self, skin, idx):
		if constInfo.INPUT_IGNORE == 1:
			return
		else:
			self.interface.OpenQuestWindow(skin, idx)

Next pieces of code you have to add to uitarget.py

import uiHealth
import constInfo

def OnUpdate(self):		
		if player.IsPVPInstance(self.vid):
			constInfo.VID = self.vid
			event.QuestButtonClick(constInfo.STHX)
			if not self.healthBoard.IsShow() and self.vid != 0:
				self.healthBoard.Show()
		else:
			self.healthBoard.Hide()
		
		if self.isShowButton:
			
			exchangeButton = self.buttonDict[locale.TARGET_BUTTON_EXCHANGE]
			distance = player.GetCharacterDistance(self.vid)

			if distance < 0:
				return

			if exchangeButton.IsShow():
				if distance > self.EXCHANGE_LIMIT_RANGE:
					self.RefreshButton()

			else:
				if distance < self.EXCHANGE_LIMIT_RANGE:
					self.RefreshButton()

In def __init__(self) (uitarget.py) must add this:
 

		self.healthBoard = uiHealth.HealthBoard()

In def Close() must add this:

		self.healthBoard.Hide()

For eg.

def Close(self):
		self.__Initialize()
		self.healthBoard.Hide()
		self.Hide()

Now you must create uihealth.py in root and paste there this code:

#Krzywy
import ui
import constInfo

def GetInfoFrom(id):
	table = {
		1	:	constInfo.PLAYER_NAME,
		2	:	constInfo.PLAYER_HP,
		3	:	constInfo.PLAYER_MAX_HP,
		4	:	constInfo.PLAYER_SP,
		5	:	constInfo.PLAYER_MAX_SP}
		
	if table.has_key(id):
		return table[id]
		

class HealthBoard(ui.ThinBoard):

	def __init__(self):
		ui.ThinBoard.__init__(self)
		
		self.Config()

	def __del__(self):
		ui.ThinBoard.__del__(self)
		
	def Config(self):
		self.SetSize(200, 120)
		self.SetPosition(0, 20)
		
		self.hp_bar = ui.Gauge()
		self.hp_bar.SetParent(self)
		self.hp_bar.SetPosition(30, 30+20)
		self.hp_bar.MakeGauge(130, "red")
		self.hp_bar.Show()
		
		self.sp_bar = ui.Gauge()
		self.sp_bar.SetParent(self)
		self.sp_bar.SetPosition(30, 60+20)
		self.sp_bar.MakeGauge(130, "blue")
		self.sp_bar.Show()
		
		self.name = ui.TextLine()
		self.name.SetParent(self)
		self.name.SetDefaultFontName()
		self.name.SetPosition(45, 30)
		self.name.SetText("")
		self.name.Show()	
		
		self.hp_show = ui.TextLine()
		self.hp_show.SetParent(self)
		self.hp_show.SetDefaultFontName()
		self.hp_show.SetPosition(60-15, 57)
		self.hp_show.SetText("")
		self.hp_show.Show()	
		
		self.sp_show = ui.TextLine()
		self.sp_show.SetParent(self)
		self.sp_show.SetDefaultFontName()
		self.sp_show.SetPosition(60-15, 80+7)
		self.sp_show.SetText("")
		self.sp_show.Show()	
		
	def OnUpdate(self):
		if (GetInfoFrom(2)+GetInfoFrom(3)+GetInfoFrom(4)+GetInfoFrom(5)) == 0:
			self.Hide()
		self.hp_bar.SetPercentage(GetInfoFrom(2), GetInfoFrom(3))
		self.sp_bar.SetPercentage(GetInfoFrom(4), GetInfoFrom(5))
		self.name.SetText(GetInfoFrom(1))
		self.hp_show.SetText("Health Points: %s / %s" % (GetInfoFrom(2), GetInfoFrom(3)))
		self.sp_show.SetText("Mana Points: %s / %s" % (GetInfoFrom(4), GetInfoFrom(5)))
		self.name.SetText("Character: %s" % (GetInfoFrom(1)))

And quest:

-- Quest Opponents HP and MP during pvp
-- Made by: Endymion_
-- Server: Ascarial.pl
quest wskaznikHpWroga begin
	state start begin
		when login begin
			cmdchat("super_quest "..q.getcurrentquestindex())
		end

		when info or button begin
			cmdchat("get_input_start")
			local vid = input(cmdchat("get_input_value"))
			cmdchat("get_input_end")
			local old_pc = pc.select(vid)
			local name = pc.get_name()
			local hp = pc.get_hp()
			local max_hp = pc.get_max_hp()
			local mp = pc.get_sp()
			local max_mp = pc.get_max_sp()
			pc.select(old_pc)
			cmdchat("pvp_zdruwko "..name.."|"..hp.."|"..max_hp.."|"..mp.."|"..max_mp)
		end
	end
end

Dif (created by blackyuko):

game2089

This difference file is created by The Interactive Disassembler

game2089
0014E673: 53 56
0014E674: 83 53
0014E675: EC 83
0014E676: 24 EC
0014E677: A1 20
0014E678: F8 8B
0014E679: 28 0D
0014E67A: 4C 20
0014E67B: 08 37
0014E67C: 89 4C
0014E67D: 45 08
0014E67E: F8 A1
0014E67F: 31 F8
0014E680: C0 28
0014E681: A1 4C
0014E682: 20 08
0014E683: 37 89
0014E684: 4C 45
0014E685: 08 F4
0014E686: 85 31
0014E688: 74 8B
0014E689: 74 75
0014E68A: A1 08
0014E68B: 20 90
0014E68C: 37 90
0014E68D: 4C 90
0014E68E: 08 90
0014E68F: 89 90
0014E690: 04 85
0014E691: 24 C9
0014E692: E8 74
0014E693: 59 5C
0014E694: FE A1
0014E695: 00 20
0014E696: 00 37
0014E697: 85 4C
0014E698: C0 08
0014E69A: C3 04
0014E69B: 74 24
0014E69C: 07 E8
0014E69D: 8B 4F
0014E69E: 40 FE
0014E69F: 24 00
0014E6A0: 85 00
0014E6A1: C0 85
0014E6A2: 74 C0
0014E6A3: 13 75
0014E6A4: 31 2F
0014E6A5: C0 C7
0014E6A6: 8B 44
0014E6A7: 55 24
0014E6A8: F8 04
0014E6A9: 33 00
0014E6AA: 15 00
0014E6AB: F8 00
0014E6AC: 28 00
0014E6AD: 4C C7
0014E6AE: 08 44
0014E6AF: 75 24
0014E6B0: 76 08
0014E6B1: 83 00
0014E6B2: C4 00
0014E6B3: 24 00
0014E6B4: 5B 00
0014E6B5: 5D 89
0014E6B6: C3 34
0014E6B7: 89 24
0014E6B8: 1C E8
0014E6B9: 24 03
0014E6BA: E8 63
0014E6BB: 31 18
0014E6BC: 38 00
0014E6BD: ED 8B
0014E6BE: FF 55
0014E6BF: 66 F4
0014E6C0: 3D 33
0014E6C1: 3F 15
0014E6C2: 4E F8
0014E6C3: 75 28
0014E6C4: DF 4C
0014E6C5: C7 08
0014E6C6: 44 B8
0014E6C7: 24 01
0014E6C8: 04 00
0014E6C9: 5F 00
0014E6CB: 00 75
0014E6CC: 00 4C
0014E6CD: 89 83
0014E6CE: 1C C4
0014E6CF: 24 20
0014E6D0: E8 5B
0014E6D1: 3B 5E
0014E6D2: 56 5D
0014E6D3: ED C3
0014E6D4: FF 8B
0014E6D5: C7 80
0014E6D6: 04 FC
0014E6D7: 24 00
0014E6DA: 00 52
0014E6DB: 00 50
0014E6DC: 83 DB
0014E6DD: E8 04
0014E6DE: 01 24
0014E6DF: 89 83
0014E6E0: 44 C4
0014E6E1: 24 08
0014E6E2: 04 DD
0014E6E3: E8 5C
0014E6E4: 68 24
0014E6E5: F6 04
0014E6E6: 17 89
0014E6E7: 00 34
0014E6E8: C7 24
0014E6E9: 44 E8
0014E6EA: 24 D2
0014E6EB: 04 62
0014E6EC: 5F 18
0014E6EE: 00 EB
0014E6EF: 00 CD
0014E6F0: 89 C7
0014E6F1: 1C 44
0014E6F3: 89 0C
0014E6F4: 44 E4
0014E6F5: 24 7B
0014E6F6: 08 33
0014E6F7: E8 08
0014E6F8: 74 C7
0014E6F9: 90 44
0014E6FA: ED 24
0014E6FB: FF 08
0014E6FC: EB 1A
0014E6FD: A6 00
0014E6FE: C7 00
0014E6FF: 44 00
0014E700: 24 C7
0014E701: 0C 44
0014E702: E4 24
0014E703: 7B 04
0014E704: 33 CA
0014E705: 08 7B
0014E706: C7 33
0014E707: 44 08
0014E708: 24 C7
0014E709: 08 04
0014E70A: 1A 24
0014E70B: 00 50
0014E70C: 00 A4
0014E70D: 00 35
0014E70E: C7 08
0014E70F: 44 E8
0014E710: 24 98
0014E711: 04 64
0014E712: CA EB
0014E713: 7B FF
0014E714: 33 E9
0014E715: 08 7B
0014E716: C7 FF
0014E717: 04 FF
0014E718: 24 FF
0014E719: 50 E8
0014E71A: A4 5E
0014E71B: 35 6A
0014E71C: 08 EB
0014E71D: E8 FF
0014E71E: 8A 90
0014E71F: 64 90
0014E720: EB 90
0014E721: FF 90
0014E722: E9 90
00312361: 64 67
00312363: 63 74
00312365: 72 76
00312366: 65 69
00312367: 6D 64
00312368: 61 00

 

game34083

This difference file is created by The Interactive Disassembler

game34083
001690C3: 53 56
001690C4: 83 53
001690C5: EC 83
001690C6: 24 EC
001690C7: A1 20
001690C8: 18 A1
001690C9: 14 18
001690CA: 6A 14
001690CB: 08 6A
001690CC: 89 08
001690CD: 45 89
001690CE: F8 45
001690CF: 31 F4
001690D0: C0 8B
001690D1: A1 75
001690D2: F0 08
001690D3: 23 31
001690D4: 6A C0
001690D5: 08 A1
001690D6: 89 F0
001690D7: 04 23
001690D8: 24 6A
001690D9: E8 08
001690DA: F2 89
001690DB: F2 04
001690DC: 00 24
001690DD: 00 E8
001690DE: 85 EE
001690DF: C0 F2
001690E0: 89 00
001690E1: C3 00
001690E2: 74 85
001690E3: 07 C0
001690E4: 8B 74
001690E5: 40 36
001690E6: 2C EB
001690E7: 85 18
001690E8: C0 B8
001690E9: 74 01
001690EA: 15 00
001690EB: 31 00
001690EC: C0 00
001690EF: F8 F4
001690FA: 24 20
001690FC: 5D 5E
001690FD: C3 5D
001690FE: 89 C3
001690FF: F6 90
00169100: 89 8B
00169101: 1C 80
00169102: 24 04
00169103: E8 01
00169104: D8 00
00169105: A4 00
00169106: EB 52
00169107: FF 50
00169108: 66 DB
00169109: 3D 04
0016910A: 3F 24
0016910B: 4E 83
0016910C: 75 C4
0016910D: DD 08
0016910E: C7 DD
0016910F: 44 5C
00169112: 5F 89
00169113: 00 34
00169114: 00 24
00169115: 00 E8
00169116: 89 B6
00169117: 1C E2
00169118: 24 28
00169119: E8 00
0016911A: A2 EB
0016911B: BD CC
0016911C: EB C7
0016911D: FF 44
0016911E: C7 24
00169120: 24 00
00169124: 00 C7
00169125: 83 44
00169126: E8 24
00169127: 01 08
00169128: 89 00
00169129: 44 00
0016912A: 24 00
0016912B: 04 00
0016912C: E8 89
0016912D: BF 34
0016912E: 82 24
0016912F: 28 E8
00169130: 00 9C
00169131: C7 E2
00169132: 44 28
00169133: 24 00
00169134: 04 EB
00169135: 5F B2
00169136: 00 90
00169137: 00 90
00169138: 00 90
00436D02: 64 67
00436D04: 63 74
00436D06: 72 76
00436D07: 65 69
00436D08: 6D 64
00436D09: 61 00

Greetings.
 

  • Love 2

Share this post


Link to post

event.questButtonClick in OnUpdate? Thats like.. making all players to DDoS Your server.. On Update = FPS = 60/s on good computers

Share this post


Link to post

In Ascarial.pl (my pserver with ~1000 players online) it works well. :)

Share this post


Link to post

A Dif? I got it working without the Dif 

Share this post


Link to post

A Dif? I got it working without the Dif 

Only for npc.get_vid(). I didn't know how to do it by python alone, so I used LUA and it works as charm.

Share this post


Link to post

waw its very nice so finally

 

but must be just with diff ah i hope?

Share this post


Link to post

waw its very nice so finally

 

but must be just with diff ah i hope?

Yes.

Share this post


Link to post

Trololololol :D
It´s possible without using any quest or dif.

Simply Python.

Made it about 2 Years ago for my Server Illirea :o

Share this post


Link to post

Trololololol :D

It´s possible without using any quest or dif.

Simply Python.

Made it about 2 Years ago for my Server Illirea :o

 

:blink:

I'll leave your post better uncommented, otherwise you won't be happy about what I'd reply.

 

If you want I can rewrite the code so you won't have to go through lua.

  • Love 4

Share this post


Link to post

 

Trololololol :D

It´s possible without using any quest or dif.

Simply Python.

Made it about 2 Years ago for my Server Illirea :o

 

:blink:

I'll leave your post better uncommented, otherwise you won't be happy about what I'd reply.

 

If you want I can rewrite the code so you won't have to go through lua.

 

If you have some free time you can rewrite. This version works ok, but why not.

Share this post


Link to post

 

Trololololol :D

It´s possible without using any quest or dif.

Simply Python.

Made it about 2 Years ago for my Server Illirea :o

 

:blink:

I'll leave your post better uncommented, otherwise you won't be happy about what I'd reply.

 

If you want I can rewrite the code so you won't have to go through lua.

 

Like i said, it is possible.

But my Actual version for it is made in C++ that´s much better for Performance and also better for not beeing stolen ;)

  • Love 1

Share this post


Link to post
0609 12:03:09061 :: 
networkModule.py(line:194) SetSelectCharacterPhase
system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:26) ?
system.py(line:130) __pack_import
 
networkModule.SetSelectCharacterPhase - exceptions.IndentationError:unindent does not match any outer indentation level (line 462)
 
0609 12:03:09061 :: ============================================================================================================
0609 12:03:09061 :: Abort!!!!
 
 
?

Share this post


Link to post

anyone can do the file and upload them cus i think 90 % of who including (me) tried they just failed >< "

0609 12:03:09061 :: 

networkModule.py(line:194) SetSelectCharacterPhase
system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:26) ?
system.py(line:130) __pack_import


networkModule.SetSelectCharacterPhase - exceptions.IndentationError:unindent does not match any outer indentation level (line 462)


0609 12:03:09061 :: ============================================================================================================
0609 12:03:09061 :: Abort!!!!

Share this post


Link to post

 

anyone can do the file and upload them cus i think 90 % of who including (me) tried they just failed >< "

0609 12:03:09061 :: 

networkModule.py(line:194) SetSelectCharacterPhase
system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:26) ?
system.py(line:130) __pack_import


networkModule.SetSelectCharacterPhase - exceptions.IndentationError:unindent does not match any outer indentation level (line 462)


0609 12:03:09061 :: ============================================================================================================
0609 12:03:09061 :: Abort!!!!

 

tabs -.-

Share this post


Link to post

 

 

anyone can do the file and upload them cus i think 90 % of who including (me) tried they just failed >< "

0609 12:03:09061 :: 

networkModule.py(line:194) SetSelectCharacterPhase
system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:26) ?
system.py(line:130) __pack_import


networkModule.SetSelectCharacterPhase - exceptions.IndentationError:unindent does not match any outer indentation level (line 462)


0609 12:03:09061 :: ============================================================================================================
0609 12:03:09061 :: Abort!!!!

 

tabs -.-

 

 

i know it's tabs O.O

 

but idk there is something wrong i do every time

 

if it's work for you can you show me the tabs

 

with screenshots??

 

Share this post


Link to post

The python part that you copied replace the spaces with tabs

Share this post


Link to post

0721 10:46:11903 :: 
networkModule.py(line:194) SetSelectCharacterPhase
system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:26) ?
system.py(line:130) __pack_import
system.py(line:110) _process_result
uiTarget.py(line:12) ?
system.py(line:130) __pack_import
 
networkModule.SetSelectCharacterPhase - exceptions.SyntaxError:invalid syntax (line 72)
 
0721 10:46:11903 :: ============================================================================================================
0721 10:46:11903 :: Abort!!!!

Share this post


Link to post

Excuse me - so do I have to use diff or not?

I'm using 40250 with vanilla core.

 

Thanks

Share this post


Link to post

Excuse me - so do I have to use diff or not?

I'm using 40250 with vanilla core.

 

Thanks

search servercommand_build add

 

           "getinputbegin"			: self.__Inputget1,
			"getinputend"			: self.__Inputget2,
			"getinput"			: self.__Inputget3,
end game

 

def __Inputget1(self):
		constInfo.INPUT_IGNORE = 1 
		
	def __Inputget2(self):
		constInfo.INPUT_IGNORE = 0
		
	def __Inputget3(self): 
		net.SendQuestInputStringPacket(str(player.GetTargetVID()))
constinfo

 

INPUT_IGNORE = 0
questlib.lua

 

function npc.get_vid()
            cmdchat("getinputbegin")
            local ret = input(cmdchat("getinput"))
            cmdchat("getinputend")
            return ret
        end
by @Croqueta
  • Love 2

Share this post


Link to post
0216 16:38:22706 :: Traceback (most recent call last):

0216 16:38:22706 ::   File "uiTarget.py", line 464, in OnUpdate

0216 16:38:22706 :: NameError
0216 16:38:22706 :: : 
0216 16:38:22706 :: global name 'event' is not defined
0216 16:38:22706 :: 

	def OnUpdate(self):
		if player.IsPVPInstance(self.vid):
			constInfo.VID = self.vid
			event.QuestButtonClick(constInfo.STHX)
			if not self.healthBoard.IsShow() and self.vid != 0:
				self.healthBoard.Show()
		else:
			self.healthBoard.Hide()
		
		if self.isShowButton:
			
			exchangeButton = self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE]
			distance = player.GetCharacterDistance(self.vid)

			if distance < 0:
				return

			if exchangeButton.IsShow():
				if distance > self.EXCHANGE_LIMIT_RANGE:
					self.RefreshButton()

			else:
				if distance < self.EXCHANGE_LIMIT_RANGE:
					self.RefreshButton()

Can you help me pls?

Share this post


Link to post
0216 16:38:22706 :: Traceback (most recent call last):

0216 16:38:22706 ::   File "uiTarget.py", line 464, in OnUpdate

0216 16:38:22706 :: NameError
0216 16:38:22706 :: : 
0216 16:38:22706 :: global name 'event' is not defined
0216 16:38:22706 :: 

	def OnUpdate(self):
		if player.IsPVPInstance(self.vid):
			constInfo.VID = self.vid
			event.QuestButtonClick(constInfo.STHX)
			if not self.healthBoard.IsShow() and self.vid != 0:
				self.healthBoard.Show()
		else:
			self.healthBoard.Hide()
		
		if self.isShowButton:
			
			exchangeButton = self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE]
			distance = player.GetCharacterDistance(self.vid)

			if distance < 0:
				return

			if exchangeButton.IsShow():
				if distance > self.EXCHANGE_LIMIT_RANGE:
					self.RefreshButton()

			else:
				if distance < self.EXCHANGE_LIMIT_RANGE:
					self.RefreshButton()

Can you help me pls?

 

import event

  • Love 1

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.