[How 2]Shinings über Python einstellen

09/23/2016 16:16 zazadi#1
Hallo,
ich möchte euch heute zeigen, wie Ihr Shinings nun absofort über Python einstellen könnt.
Bevor es los geht möchte Ich noch sagen, dass das Release eig. von
"ShuzZzle" auf dem metin2 developer forum ist. Jedoch ist dort ein Fehler drin,
und Ich, der keine Ahnung von C++ hat, wusste nicht genau wie Ich manches einfügen muss.

Nun habe ich es auf jeden fall geschafft und möchte es euch auch zeigen.

Screen:



How 2:

1. Die ShiningSettings.cpp und ShiningSettings.h vom Anhang im Verzeichnis
Userinterface einfügen.

2. Userinterface.cpp öffnen und nach folgendem suchen:
PHP Code:
initServerStateChecker(); 
darunter folgendes einfügen:
PHP Code:
initShining(); 
3. Jetzt die Datei StdAfx.h öffnen und folgendes suchen:
PHP Code:
void initMessenger(); 
darunter einfügen:
PHP Code:
void initShining(); 
4. Nun InstanceBase.cpp öffnen und direkt oben irgendwo folgendes einfügen:

PHP Code:
#include "boost/algorithm/string.hpp"

std::map<intchar*> shiningdata;
std::map<intchar*>::iterator shiningit
5. in der selben Datei folgendes suchen:
PHP Code:
if (12010 <= vnum && vnum <= 12049)
            {
                
__AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL);
                
__AttachEffect(EFFECT_REFINED+EFFECT_BODYARMOR_SPECIAL2);
            } 
Darunter das einfügen:
PHP Code:
if(!shiningdata.empty())
            {
                for (
shiningit=shiningdata.begin(); shiningit!=shiningdata.end(); shiningit++)
                    if (
shiningit->first == vnum)
                    {
                        
std::string substr(shiningit->second);
                        
std::vector<stringchars;
                        
boost::split(charssubstrboost::is_any_of("#"));
                        for(
std::vector<string>::size_type i 0!= chars.size(); i++)
                        {
                            
__AttachEffectToArmours(chars[i]);
                        }
                    }
            } 
6. InstanceBase.h öffnen und nach folgendem suchen:
PHP Code:
protected:
        
DWORD    __AttachEffect(UINT eEftType);
        
DWORD    __AttachEffectToArmours(string effectfilename);
        
void    __DetachEffect(DWORD dwEID); 
Das ersetzt ihr mit:
PHP Code:
protected:
        
DWORD    __AttachEffect(UINT eEftType);
        
DWORD    __AttachEffectToArmours(string effectfilename);
        
DWORD    __AttachEffect(char filename[128]);
        
void    __DetachEffect(DWORD dwEID); 
7. InstanceBaseEffect.cpp öffnen und folgendes suchen:
PHP Code:
DWORD CInstanceBase::__EffectContainer_AttachEffect(DWORD dwEftKey
Unter diesen Block folgendes einfügen:
PHP Code:
DWORD CInstanceBase::__AttachEffectToArmours(string effectfilename)
{
    const 
char effectpath effectfilename.c_str();
    
CEffectManager::Instance().RegisterEffect(effectpathfalsefalse);
    return 
m_GraphicThingInstance.AttachEffectByName(0"Bip01"effectpath);

So jetzt öffnet ihr Visual Studio, drückt per Rechtklick auf das Projekt Userinterface ->Hinzufügen->Vorhandenes Element...
und wählt die Dateien ShiningSettings.cpp und ShiningSettings.h aus.
Nun könnt ihr die Binary compilen.
8. Als nächstes öffnet ihr in der root.eix/epk die game.py,
fügt oben bei den imports folgendes hinzu:
PHP Code:
import effecttable 
9. Nun sucht ihr in der selben Datei nach:
PHP Code:
def __init__ 
und fügt hier drunter irgendwo folgendes hinzu:
PHP Code:
effecttable.LoadEffectTable() 
10. Als letztes fügt ihr die effecttable.py in das root Verzeichnis und der Rest sollte selbst erklärend sein.

Hinweis:
Im Archiv ist nochmal ein How 2 mit dem Binary Part
wegen den Tabs.

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

Lg Core
09/23/2016 19:38 Bekir Akdemir#2
copyright then prevo2 xD
09/24/2016 13:02 MaxChri#3
Gute Sache! :)

Um euch die Knechtarbeit abzunehmen, habe ich mal was kleines geschrieben.
Somit müsst ihr die Einträge in der effecttable.py nicht selbst erstellen.
Falls ihr nichts damit anfangen könnt bzw. Hilfe dabei benötigt, schreibt mich an. ;)

PS: Aze Shinings beste :handsdown:

Code:
; -- .au3 script --

#include <file.au3>


$gDir = "d:/ymir work/pc/common/effect/armor/aze_shining/"
$gFile = "shining.txt"
$sValue = 34100
$gCounts = 20

If FileExists($gFile) Then FileDelete($gFile)
_FileCreate($gFile)
$fOpen = FileOpen($gFile)

For $i = 1 To $gCounts

	For $i2 = 0 To 7

		$fWrite = "	" & ($sValue + $i2) & " : " & '["' & $gDir & _Shinings($i2) & '"],'
		FileWriteLine($gFile, $fWrite)

	Next

	$sValue += ($i2 + 2)

Next


Func _Shinings($num)
	Local $var[8]
	$var[0] = "aze_shining_black"
	$var[1] = "aze_shining_blue"
	$var[2] = "aze_shining_green"
	$var[3] = "aze_shining_orange"
	$var[4] = "aze_shining_red"
	$var[5] = "aze_shining_violett"
	$var[6] = "aze_shining_white"
	$var[7] = "aze_shining_yellow"

	Return $var[$num] & ".mse"
EndFunc
09/24/2016 14:35 Aze /..#4
Quote:
Originally Posted by MaxChri View Post
Gute Sache! :)

Um euch die Knechtarbeit abzunehmen, habe ich mal was kleines geschrieben.
Somit müsst ihr die Einträge in der effecttable.py nicht selbst erstellen.
Falls ihr nichts damit anfangen könnt bzw. Hilfe dabei benötigt, schreibt mich an. ;)

PS: Aze Shinings beste :handsdown:

Code:
; -- .au3 script --

#include <file.au3>


$gDir = "d:/ymir work/pc/common/effect/armor/aze_shining/"
$gFile = "shining.txt"
$sValue = 34100
$gCounts = 20

If FileExists($gFile) Then FileDelete($gFile)
_FileCreate($gFile)
$fOpen = FileOpen($gFile)

For $i = 1 To $gCounts

	For $i2 = 0 To 7

		$fWrite = "	" & ($sValue + $i2) & " : " & '["' & $gDir & _Shinings($i2) & '"],'
		FileWriteLine($gFile, $fWrite)

	Next

	$sValue += ($i2 + 2)

Next


Func _Shinings($num)
	Local $var[8]
	$var[0] = "aze_shining_black"
	$var[1] = "aze_shining_blue"
	$var[2] = "aze_shining_green"
	$var[3] = "aze_shining_orange"
	$var[4] = "aze_shining_red"
	$var[5] = "aze_shining_violett"
	$var[6] = "aze_shining_white"
	$var[7] = "aze_shining_yellow"

	Return $var[$num] & ".mse"
EndFunc
Meine Shinings :mofo: xD
Habs getestet, funktioniert super mit deinem Script.
09/25/2016 09:42 悪地城#5
Bestimmt für manche sehr nützlich. Danke für den RLS
09/29/2016 13:13 420Ŧยςђร#6
Viel zu umständlich, wer sich in C++ ein wenig auskennt weiß das es auch eine viel einfachere Methode dafür gibt.
Ich sage nur Clientsrc -> InstanceBase.h & InstanceBase.cpp
09/29/2016 13:55 zazadi#7
Quote:
Originally Posted by 420Ŧยςђร View Post
Viel zu umständlich, wer sich in C++ ein wenig auskennt weiß das es auch eine viel einfachere Methode dafür gibt.
Ich sage nur Clientsrc -> InstanceBase.h & InstanceBase.cpp
Das How2 ist auch für die Gedacht, die keine Ahnung von C++ haben.

Quote:
Originally Posted by Core ツ View Post
Jedoch ist dort ein Fehler drin,
und Ich, der keine Ahnung von C++ hat, wusste nicht genau wie Ich manches einfügen .
09/29/2016 14:13 Aze /..#8
Quote:
Originally Posted by 420Ŧยςђร View Post
Viel zu umständlich, wer sich in C++ ein wenig auskennt weiß das es auch eine viel einfachere Methode dafür gibt.
Ich sage nur Clientsrc -> InstanceBase.h & InstanceBase.cpp
Dann nenn uns mal deine Lösung.
09/29/2016 21:10 420Ŧยςђร#9
In der InstanceBase.h wird das Shining benannt, wie es im Source halt heißt.
Wie man auf dem Screen hier sieht:
[Only registered and activated users can see links. Click Here To Register...]
Kommen wir zur InstanceBase.cpp, hier auf dem Screen sieht man die VNUM's der jeweiligen Item's die das Shining haben sollen oder den sogenannten "refined effect".
[Only registered and activated users can see links. Click Here To Register...]
Beispiel:
// Bsp: 105er Rüstungen BEGIN
if (vnum == 123456 ||
vnum == 78901 ||
vnum == 23456 ||
vnum == 78901)
{
__AttachEffect(EFFECT_REFINED + EFFECT_105_RÜSTUNG_SHINING); // 105er Rüstungen "EFFECT_120_RÜSTUNG_SHINING" steht wie gesagt in der InstanceBase.h dann.
}
Es tut mir leid, ich habe dann noch vergessen dazu das man noch etwas in der playersettingsmodule.py definieren muss aber wenn ich schon einmal dabei bin, dann machen wir es auch vollständig.
Kommen wir zur Playersettingsmodule.py in den Root.ei* / ep*
[Only registered and activated users can see links. Click Here To Register...]
Hier auf dem Screenshot sehen wir wie der "refined effect" z.B. von den Rüstungen auf +7/8/9 definiert ist.
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+16, "Bip01", "D:/ymir work/pc/common/effect/armor/armor_7.mse")
Ist z.B. das Glitzern von +7.
Dann geht man einfach nach ganz unten wo es aufhört, bei mir jetzt bei:
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+21, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-5-1.mse")
Das ist der Effekt z.B. von den neuen Rüstungen (120er) mit den Blitzen.
Jetzt schreibt dadrunter es dann so wie man es auch in der Instancebase.h / cpp gemacht hat mit natürlichen dem angegebenen Pfad.
Beispiel:
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+22, "Bip01", "D:/ymir work/pc/common/effect/armor/PfadvonShiningEPVP.mse")
Die +22 steht in der InstanceBase.h das ist die Nummerierung vom Shining, wer immer noch nicht weiß was gemeint ist hier ein Screen dazu:
[Only registered and activated users can see links. Click Here To Register...]
Wie gesagt, das ist die Nummerierung des Shinings diese kann man auch einsehen, wenn man mit dem Mauszeiger über den Text geht von dem Shinings jetzt (EFFECT_120_RÜSTUNG_SHINING).
Jetzt müsst Ihr nurnoch die Exe compilen, die Root.ei*/epk packen, und fertig seit ihr.
Gruß,
420Ŧยςђร
09/29/2016 22:26 zazadi#10
Quote:
Originally Posted by 420Ŧยςђร View Post
In der InstanceBase.h wird das Shining benannt, wie es im Source halt heißt.
Wie man auf dem Screen hier sieht:
[Only registered and activated users can see links. Click Here To Register...]
Kommen wir zur InstanceBase.cpp, hier auf dem Screen sieht man die VNUM's der jeweiligen Item's die das Shining haben sollen oder den sogenannten "refined effect".
[Only registered and activated users can see links. Click Here To Register...]
Beispiel:
// Bsp: 105er Rüstungen BEGIN
if (vnum == 123456 ||
vnum == 78901 ||
vnum == 23456 ||
vnum == 78901)
{
__AttachEffect(EFFECT_REFINED + EFFECT_105_RÜSTUNG_SHINING); // 105er Rüstungen "EFFECT_120_RÜSTUNG_SHINING" steht wie gesagt in der InstanceBase.h dann.
}
Es tut mir leid, ich habe dann noch vergessen dazu das man noch etwas in der playersettingsmodule.py definieren muss aber wenn ich schon einmal dabei bin, dann machen wir es auch vollständig.
Kommen wir zur Playersettingsmodule.py in den Root.ei* / ep*
[Only registered and activated users can see links. Click Here To Register...]
Hier auf dem Screenshot sehen wir wie der "refined effect" z.B. von den Rüstungen auf +7/8/9 definiert ist.
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+16, "Bip01", "D:/ymir work/pc/common/effect/armor/armor_7.mse")
Ist z.B. das Glitzern von +7.
Dann geht man einfach nach ganz unten wo es aufhört, bei mir jetzt bei:
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+21, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-5-1.mse")
Das ist der Effekt z.B. von den neuen Rüstungen (120er) mit den Blitzen.
Jetzt schreibt dadrunter es dann so wie man es auch in der Instancebase.h / cpp gemacht hat mit natürlichen dem angegebenen Pfad.
Beispiel:
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+22, "Bip01", "D:/ymir work/pc/common/effect/armor/PfadvonShiningEPVP.mse")
Die +22 steht in der InstanceBase.h das ist die Nummerierung vom Shining, wer immer noch nicht weiß was gemeint ist hier ein Screen dazu:
[Only registered and activated users can see links. Click Here To Register...]
Wie gesagt, das ist die Nummerierung des Shinings diese kann man auch einsehen, wenn man mit dem Mauszeiger über den Text geht von dem Shinings jetzt (EFFECT_120_RÜSTUNG_SHINING).
Jetzt müsst Ihr nurnoch die Exe compilen, die Root.ei*/epk packen, und fertig seit ihr.
Gruß,
420Ŧยςђร
Durch die Methode von mir oben kann man allen Rüstungen Shinings verpassen, ohne Sie vorher im Source nochmal eingefügt zu haben, sprich man gibt in der effecttable.py die VNUM der Rüstung an und den Pfad zum Effect.
Bei der Methode die du zeigst, müsste man jedes mal wenn man einer neuen Rüstung ein Shining geben will im Source die Rüstung einfügen und die exe compilen.
10/01/2016 12:41 Aze /..#11
Quote:
Originally Posted by 420Ŧยςђร View Post
Joar die Methode gibts auch im Dev Forum, finde ich aber unnütz und umständlich, wenn ich jedes Mal den Source compilen muss, nur damit ne Rüstung ein Shining haben kann. Da sollte es lieber via shinings.py gelöst werden, anstatt so. Ehrlich gesagt finde ich deine Methode mehr als nur umständlich. Da macht man sich zusätzlich mehr Arbeit, als man eigentlich braucht.
10/16/2016 19:35 xRed™#12
Sieht sehr gut aus. Dankeschön :)
10/23/2016 19:17 Prince43™#13
Das System an sich ist sehr toll und Shuzzle auch ein sehr guter Python Coder. Ich habe noch die Version mit Weapon_refine zusätzlich. Danke dass du es mit uns teilst ^^

greetz
10/26/2016 21:45 Premiumlike#14
Währe schön wenn wir auch die Version mit Waffen Shining bekommen würden
10/27/2016 12:26 DeZy.#15
Sehr nice ;)

Liebe Grüße,
DeZy.