[RELEASE] Switcher+ 100% DE LIKE (PY & LUA)

02/26/2016 20:58 gerald500#1
Hallöle Epvp wie der Titel schon sagt release ich mal meinen Switcher+

hier mal zwei Screens dazu :

[CENTER][Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

für die die den Switcher+ nicht kennen einfach die Beschreibung des Items am Screen lesen dann wisst ihr schon was er macht

genug gelabert zum einfügen:

in der Constinfo irgendwo das hier einfügen:
Code:
NEWSWITCHER = {"qid":0, "questCMD":"","attr_number":0,"old_attr_type":[],"new_attr_type":[],"old_attr_value":[],"new_attr_value":[],"itemVnum":0,"open":0,"actual_slot":0}

am anfang der game.py
Code:
import uinewsitcher

nach def __init__(self, stream): suchen und das hinzufügen

Code:
self.NewSwitcher = uinewsitcher.NewSwitcher()


in der game.py nach __ServerCommand_Build suchen und das hinzufügen:

Code:
"NEWSWITCHER"			:self._NewSwitcherCMD,
irgendwo in der game diese Funktion adden:
Code:
	def _NewSwitcherCMD(self, command):
		cmd = command.split("/")
		if cmd[0] == "QID":
			constInfo.NEWSWITCHER["qid"] = int(cmd[1])
		elif cmd[0] == "QUESTCMD": 
			net.SendQuestInputStringPacket(str(constInfo.NEWSWITCHER["questCMD"]))
		elif cmd[0] == "OLD_ATTR":
			constInfo.NEWSWITCHER["itemVnum"] = 0
			constInfo.NEWSWITCHER["itemVnum"] = int(cmd[1])
			constInfo.NEWSWITCHER["old_attr_type"].append(int(cmd[2]))
			constInfo.NEWSWITCHER["old_attr_value"].append(int(cmd[3]))
			self.NewSwitcher.BoniAnzahl = 0
			self.NewSwitcher.BoniAnzahl = len(constInfo.NEWSWITCHER["old_attr_type"])
		elif cmd[0] == "CLEAR_BONUS":
			bonis = ["new_attr_type","new_attr_value","old_attr_type","old_attr_value"]
			for i in range(len(bonis)):
				constInfo.NEWSWITCHER[bonis[i]] = []
		elif cmd[0] == "NEW_ATTR":
			constInfo.NEWSWITCHER["new_attr_type"].append(int(cmd[1]))
			constInfo.NEWSWITCHER["new_attr_value"].append(int(cmd[2]))
		elif cmd[0] == "OPEN":
			self.NewSwitcher.Open()

so game ist fertig als nächstes ist die uiinventory dran

nach def __init__(self): in der Class inventorywindow suchen und folgendes hinzufügen:

Code:
self.itemVnum = 0

nach def SelectItemSlot suchen und unter

Code:
self.__DropSrcItemToDestItemInInventory(attachedItemVID, attachedSlotPos, itemSlotIndex)

Code:
self.itemVnum = attachedItemVID

hinzufügen

nach __SendUseItemToItemPacket suchen und durch meine funktion ersetzen:

Code:
	def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos):
		# °³ÀλóÁ¡ ¿*°í ÀÖ´Â µ¿¾È ¾ÆÀÌÅÛ »ç¿ë ¹æÁö
		dstItemVNum = player.GetItemIndex(dstSlotPos)
		if uiPrivateShopBuilder.IsBuildingPrivateShop():
			chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
			return
		if self.itemVnum == 76026:
			if constInfo.NEWSWITCHER["open"] == 1:
				return
			wearfleg = self.GetWearfleg(dstItemVNum)
			self.itemVnum = 0
			if wearfleg:
				constInfo.NEWSWITCHER["questCMD"] = "USE_SWITCHER#76026#"+str(dstSlotPos)+"#"+str(srcSlotPos)+"#"+str(wearfleg)
				event.QuestButtonClick(int(constInfo.NEWSWITCHER["qid"]))
				constInfo.NEWSWITCHER["actual_slot"] = int(dstSlotPos)
				return
		
		net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)

darunter die neue Funktion einfügen:
Code:
	def GetWearfleg(self,itemVnum):
		item.SelectItem(itemVnum)
		wearflags = {item.WEARABLE_BODY:1,item.WEARABLE_HEAD:2,item.WEARABLE_FOOTS:4,item.WEARABLE_WRIST:8,item.WEARABLE_WEAPON:16,item.WEARABLE_NECK:32,item.WEARABLE_EAR:64,item.WEARABLE_SHIELD:256}
		wears = [item.WEARABLE_BODY,item.WEARABLE_HEAD,item.WEARABLE_FOOTS,item.WEARABLE_WRIST,item.WEARABLE_WEAPON,item.WEARABLE_NECK,item.WEARABLE_EAR,item.WEARABLE_SHIELD]
		try:
			for i in range(len(wears)):
				if item.IsWearableFlag(wears[i]):
					return int(wearflags[wears[i]])
		except KeyError:
			return None

so uiinventory ist auch fertig

so nun müsst ihr in navicat gehen auf die tabelle item_attr und export wizard klicken und eine txt file dumpen, und in diesem txt file alle leerzeichen mit # ersetzen damit die quest eure bonis auslesen kann.

Diese Datei kommt in euren Quest Ordner


so und zu guter letzt fügt ihr die sachen ein selectattrdialog.py nach uiscript quest sollte bekannt sein und die uinewswitcher nach root
Code:
INSERT INTO `item_proto` VALUES ('76026', 0xB8AEB9D9C0CCC0C720B9DDC1F6, 0x476567656E7374616E64207665727A61756265726E2B, '18', '0', '0', '1', '0', '0', '0', '', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0', '0');

	<ItemDef Vnum="76026" Name="└τ░µ║±╝¡" LocalizedName[CENTER]
hier der stuff zum item einfügen:
="Gegenstand verzaubern+" Type="3" SubType="18" Weight="0" Size="1" AntiFlags="65920" Flags="8196" WearFlags="0" ImmuneFlags="0" Gold="0" ShopBuyPrice="0" LimitType0="0" LimitValue0="0" LimitType1="0" LimitValue1="0" ApplyType0="0" ApplyValue0="0" ApplyType1="0" ApplyValue1="0" ApplyType2="0" ApplyValue2="0" Value0="0" Value1="0" Value2="0" Value3="0" Value4="0" Value5="0" Socket0="0" Socket1="0" Socket2="0" RefinedVnum="0" RefineSet="0" AlterToMagicItemPercent="0" Specular="0" GainSocketPercent="0" AddonType="0" /> 76026 Gegenstand verzaubern+ Entfernt die Boni eines deiner Gegenstände und fügt neue hinzu. Die neuen Boni werden dir vorher angezeigt. Du kannst dann wählen, ob du die angezeigten Boni möchtest. 76026 ETC icon/item/new_switcher.tga
[/CENTER]
icon ist im anhang

  • Ich hoffe ich hab jetzt nicht irgendwas vergessen hab das Release gerade richtig schnell geschriben
  • Wer Probleme beim einfügen hat sollte sich schämen kann hier aber dennoch seine Probleme posten
  • so weit ich es getestet habe funtzt der Switcher einwandfrei sollten bugs auftreten dann meldet euch hier im Thread ich werde sie beheben, den ich hab ihn jetzt erst fertig gestellt und nicht auf Herz und Nieren getestet.
  • Gegebenfalls die item.set_attribute und item.get_attribute funktion anpassen an eure Files.
  • viel Spaß damit



    Mfg Gerald


--------------------UPDATE----------------------


hab mal die quest editiert und neu hochgeladen hab unter anderem alles was sensi gesagt hat gefixxt und noch mehr abfragen hinzugefügt somit sollte das system nun sicher sein.

und ihr solltet in uiinventory nach __SendMoveItemPacket suchen und folgendes darunter einmal eingerückt schreiben:
Code:
		if constInfo.NEWSWITCHER["open"] == 1:
			return
sollte dann so aussehen:

Code:
	def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
		# °³ÀλóÁ¡ ¿*°í ÀÖ´Â µ¿¾È ¾ÆÀÌÅÛ »ç¿ë ¹æÁö
		if uiPrivateShopBuilder.IsBuildingPrivateShop():
			chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
			return
		
		if constInfo.NEWSWITCHER["open"] == 1:
			return

		net.SendItemMovePacket(srcSlotPos, dstSlotPos, srcItemCount)
02/26/2016 21:26 DasSchwarzeT#2
Ist ja ganz nett aber weshalb codest du das alles in Python? Über C++ wäre das viel sinnvoller.
02/26/2016 22:11 gerald500#3
Quote:
Originally Posted by DasSchwarzeT View Post
Ist ja ganz nett aber weshalb codest du das alles in Python? Über C++ wäre das viel sinnvoller.
1.)ich muss dir ehrlich sagen ich hab mich mit dem metin2 source zu wenig befasst bis jetzt um da was neues coden zu können den dazu müsste man mal die abläufe etc durchforsten

2.) die meisten die von mir was kaufen verwenden keinen source die verwenden teilweise 34k und 2089 games deßhalb code ich auch in py und lua
02/26/2016 23:06 .NennoX#4
Quote:
Originally Posted by DasSchwarzeT View Post
Ist ja ganz nett aber weshalb codest du das alles in Python? Über C++ wäre das viel sinnvoller.
man muss ja nicht wirklich ALLES in c++ coden... :D

Nice Release und gute Arbeit :)
02/26/2016 23:12 Dev'Malum#5
Dankey, sehr nett.
02/27/2016 00:16 DasSchwarzeT#6
Quote:
Originally Posted by .NennoX View Post
man muss ja nicht wirklich ALLES in c++ coden... :D

Nice Release und gute Arbeit :)
Wenn man keine Ahnung hat...
02/27/2016 00:36 rollback#7
Mir sind jetzt beim durchschauen der Quest schonmal ein paar grobe Fehler aufgefallen:
- Du übernimmst vom Client den Slot des Switchitems ohne die Vnum zu Überprüfen (cmd[4]). Damit könnte man z.B. einfach mit einem Roten Trank switchen.
- Du übernimmst die wearflag einfach so vom Client, man könnte also z.B. Boni einer Waffe in eine Rüstung switchen lassen.
- Du übernimmst bei switch_boni einfach so die Boni die vom Client gesendet werden. Man kann also alle Boni in sein Item setzen die man haben möchte. Damit könnte man sich auch z.B. Werte wie 30000 DSS auf alle möglichen Items setzen.
02/27/2016 00:38 Yiv#8
Quote:
Originally Posted by Seחsi View Post
Mir sind jetzt beim durchschauen der Quest schonmal ein paar grobe Fehler aufgefallen:
- Du übernimmst vom Client den Slot des Switchitems ohne die Vnum zu Überprüfen (cmd[4]). Damit könnte man z.B. einfach mit einem Roten Trank switchen.
- Du übernimmst die wearflag einfach so vom Client, man könnte also z.B. Boni einer Waffe in eine Rüstung switchen lassen.
- Du übernimmst bei switch_boni einfach so die Boni die vom Client gesendet werden. Man kann also alle Boni in sein Item setzen die man haben möchte.
Du solltest dir definitiv mal über die Sicherheit deiner Systeme Gedanken machen ô.o

MfG
02/27/2016 00:48 gerald500#9
Quote:
Originally Posted by Seחsi View Post
Mir sind jetzt beim durchschauen der Quest schonmal ein paar grobe Fehler aufgefallen:
- Du übernimmst vom Client den Slot des Switchitems ohne die Vnum zu Überprüfen (cmd[4]). Damit könnte man z.B. einfach mit einem Roten Trank switchen.
- Du übernimmst die wearflag einfach so vom Client, man könnte also z.B. Boni einer Waffe in eine Rüstung switchen lassen.
- Du übernimmst bei switch_boni einfach so die Boni die vom Client gesendet werden. Man kann also alle Boni in sein Item setzen die man haben möchte. Damit könnte man sich auch z.B. Werte wie 30000 DSS auf alle möglichen Items setzen.
joa wie gesagt habs grad erst fertig gebastelt über die sicherheit hab ich mir jetzt eher weniger gedanken gemacht :D

sollte ich mal schnell fixxen
02/27/2016 10:20 komplett Lost.#10
Ja bitte, würde es gerne benutzen!

#187er
02/27/2016 18:03 gerald500#11
so hab mal alles was sensi gesagt hat geändert und zusätzlich noch einige andere abfragen eingefügt sollte nun komplett ohne irgendwelche lücken sein.

Habe es auch in den thread editiert sollte nicht zu übersehen sein
02/27/2016 19:12 rollback#12
Man kann die Boni immernoch manipulieren.

Man kann beim "SWITCH" in cmd[2] und cmd[3] eine Vnum und einen Slot von einem Item mitschicken, das nicht mehr der Wearflag von dem eigentlichen Item entspricht.
02/27/2016 19:52 gerald500#13
Quote:
Originally Posted by Seחsi View Post
Man kann die Boni immernoch manipulieren.

Man kann beim "SWITCH" in cmd[2] und cmd[3] eine Vnum und einen Slot von einem Item mitschicken, das nicht mehr der Wearflag von dem eigentlichen Item entspricht.
fixxed und neu hochgeladen
02/27/2016 20:27 Azrog#14
Thanks for share.

Azrog.
02/28/2016 12:20 RealReznov#15
item.set_attribute and item.get_attribute c++ side pls?