Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hud Q&A



Masterside
16.08.2009, 14:37
Hallo Community.

Da ich bis jetzt noch kein Thread gesehen habe, der sich mit diesem Thema befasst, mach ich diesen jetzt einfachmal auf.

Habe auch direkt zwei Fragen.

1. Wie kann ich eine Ammobar und eine Restammobar erstellen? Also diese hier:
http://wiki.crymod.com/index.php/HUD_Health_and_Energy_Bars_%28Video_Tutorial%29
Nur als Ammo und Restammobar und nicht als Healthbar und Energybar.

2. Wie kann ich im ActionScript einstellen, dass wenn z.B. Stärke aktiviert ist, ein bestimmtes Bild erscheint?

Blue
17.08.2009, 13:31
hi masterside, kann dir leider nur zu frage eins helfen, bei zwei müsste ich mich selbst erstmal tiefer in die materie reinhängen.

also folgendes: in dem tut das du da vor dir liegen hast wird einfach nur das standart HUD_AmmoHealthEnergySuit.gfx durch ein benutzerdefiniertes ersetzt. kombiniere die informationen aus dem tut und dem das ich dir bei crymod gezeigt habe, dann hast du fast schon die halbe miete zusammen.

edit: link für das tut bei crymod: http://www.crymod.com/thread.php?postid=172758#post172758

nach dem du dein custom hud element (k-a wie ichs sonst nennen soll) mit deinen zwei neuen leisten gebastelt hast, benennst du in den actionscripts erstmal die funktionen in setAmmo & setRestAmmo um.

code könnte dann in etwa so aussehen (warnung: bin kein erfahrener flash user):



var m_ammo = 100;

setAmmo = function(_ammo)
{

var ammo = Math.floor((Math.max(_ammo,0)));

if(m_ammo!=ammo)
{
m_ammo = ammo;

// hab das symbol ammobar genannt:
ammobar.gotoAndStop(m_ammo);
}
}


var m_rammo = 100;

setRestAmmo = function(_rammo)
{

var rammo = Math.floor((Math.max(_rammo,0)));

if(m_rammo!=rammo)
{
m_rammo = rammo;


// das symbol für rest ammo heißt bei mir r_ammobar
r_ammobar.gotoAndStop(m_rammo);
}
}


zugegeben, du wirst noch einiges drann rum zu schrauben haben, da die leisten ja mit 100% arbeiten - du aber mit unterschiedlichen ammo zahlen arbeitest.

aber egal, weiter im text. wie in dem von mir geschickten tut mit dem hallo welt kannst du jetzt erstmal dein neues hud.h deklarieren und dann in der hud.cpp init() registrieren.

im anschluß gehst du einfach mal in die funktion (~line 5120):
void CHUD::UpdatePlayerAmmo()und schreibst an den schluß sowas in der art:


m_animMyFirstHud.Invoke("setAmmo", m_playerAmmo);
m_animMyFirstHud.Invoke("setRestAmmo", m_playerRestAmmo);
---------------------------------------------------
... nach einem blick ins sdk...
---------------------------------------------------

hm, man könnte den aktuellen ammo bestand auf 100% ungefähr so umrechnet. (bei der restammo ist das nicht so das problem, da man die magazien größe über m_playerClipSize abfragen kann). das wäre dann wohl sowas in der art (3satz, mein mathe lehrer sagte mir seinerzeit das ich es für irgendetwas gebrauchen könnte *g*):


int test01 =(int) (m_playerClipSize / 100)*m_playerRestAmmo;
m_animMyFirstHud.Invoke("setRestAmmo", test01);
---------------------------------------------------
... nach einem weiteren blick ins sdk...
---------------------------------------------------

sooo, na gucken wir mal, ich denke für den ammo bar könnte man es so machen:


IItem * pItem = gEnv->pGame->GetIGameFramework()->GetClientActor()->GetCurrentItem();
if(CWeapon *pWeapon = static_cast<CWeapon*>(pItem->GetIWeapon()))
{
IFireMode *pFM = pWeapon->GetFireMode(pWeapon->GetCurrentFireMode());
int test02 = gEnv->pGame->GetIGameFramework()->GetClientActor()->GetInventory()->GetAmmoCapacity(pFM->GetAmmoType()));
test02 = (int) (test02 / 100)*m_playerAmmo;
m_animMyFirstHud.Invoke("setAmmo", test02);
}letzteres geht im übrigen nur im spiel, im editor gibt es keine ammo restriction... und selbst wenn es eine gäbe müsstest du erst unter ammopickup.cpp / CheckAmmoRestrictions(...) die if(bEditor) abfrage rausnehmen... ;)

also vom c++ code her sollte alles stimmen, für den actionscript teil kann ich mich aber nit verbürgen. :lol:


gruß Blue

--------------------------------------------------------------------------------------------------

Edit:
Hm, feedback obs geklappt hat wäre schon nicht schlecht gewesen, aber seis drumm, habs auspobiert und bei mir klappts. Der follständigkeit halber will/kann ich nun auch Frage 2 beantworten:

Wie im Tutorial mit dem custom Healthbar machen wir einfach wieder ein Symbol(nennen wirs mal mPicture) - hier legen wir 5 keyfreams an (aber keine weiteren Ebenen!).
Keyfream 1 bleibt leer!
In die Keyfreams 4-5 fügst du nun einfach die Grafik ein die du gerne angezeigt haben möchtest.
In ActionScript schreibst du nun folgendes rein:




setPic = function(_PicNr)
{
mPicture.gotoAndStop(_PicNr);
}





Ich bleib mal an der Stelle einfach bei der variable m_animMyFirstHud aus dem HalloWelt Tutorial von Crymod.

Geh nun zur Funktion (~line: 1181)
void CHUD::ModeChanged(ENanoMode mode) (auch in der HUD.cpp zu finden)

Dort erweiterst du nun die switch / case anweisung wie folgt:



switch(mode)
{
case NANOMODE_SPEED:
m_animMyFirstHud.Invoke("setPic", 2); //<<-- 1st Pic
m_animPlayerStats.Invoke("setMode", "Speed");
m_fSpeedTimer = gEnv->pTimer->GetFrameStartTime().GetMilliSeconds();
m_fSuitChangeSoundTimer = m_fSpeedTimer;
break;
case NANOMODE_STRENGTH:
m_animMyFirstHud.Invoke("setPic", 3); //<<-- 2th Pic
m_animPlayerStats.Invoke("setMode", "Strength");
m_fStrengthTimer = gEnv->pTimer->GetFrameStartTime().GetMilliSeconds();
m_fSuitChangeSoundTimer = m_fStrengthTimer;
break;
case NANOMODE_DEFENSE:
m_animMyFirstHud.Invoke("setPic", 4); //<<-- 3th Pic
m_animPlayerStats.Invoke("setMode", "Armor");
m_fDefenseTimer = gEnv->pTimer->GetFrameStartTime().GetMilliSeconds();
m_fSuitChangeSoundTimer = m_fDefenseTimer;
break;
case NANOMODE_CLOAK:
m_animMyFirstHud.Invoke("setPic", 5); //<<-- 4th Pic
m_animPlayerStats.Invoke("setMode", "Cloak");

PlaySound(ESound_PresetNavigationBeep);
if(m_pNanoSuit->GetSlotValue(NANOSLOT_ARMOR, true) != 50 || m_pNanoSuit->GetSlotValue(NANOSLOT_SPEED, true) != 50 ||
m_pNanoSuit->GetSlotValue(NANOSLOT_STRENGTH, true) != 50 || m_pNanoSuit->GetSlotValue(NANOSLOT_MEDICAL, true) != 50)
{
TextMessage("suit_modification_engaged");
}

m_fSuitChangeSoundTimer = gEnv->pTimer->GetFrameStartTime().GetMilliSeconds();

if (gEnv->pAISystem)
{
pData = gEnv->pAISystem->CreateSignalExtraData();//AI System will be the owner of this data
pData->iValue = NANOMODE_CLOAK;
pPlayer = static_cast<CPlayer *>(gEnv->pGame->GetIGameFramework()->GetClientActor());
if(pPlayer && pPlayer->GetEntity() && pPlayer->GetEntity()->GetAI())
gEnv->pAISystem->SendSignal(SIGNALFILTER_SENDER,1,"OnNanoSuitMode",pPlayer->GetEntity()->GetAI(),pData);
}
break;
default:
break;
}


Blue

Masterside
19.08.2009, 14:19
So konnte es noch nicht testen, da ich noch an Visual Studio was einstellen musste, da bei erstellen immer ein fehler kamm, aber dass hat sich jetzt erledigt.

in 5 min kann ich dir sagen ob es geklappt hat.

Masterside
22.08.2009, 20:23
So habe das mal getestet, bekomme bei der erstellung, immer sieben fehler angezeigt.
Und das sind sie:
http://www.abload.de/thumb/fehlerv6oi.jpg (http://www.abload.de/image.php?img=fehlerv6oi.jpg)

Pat21
22.08.2009, 20:33
@ Masterside
Kannst du bitte auch den Code-Teil darüber posten ?? Du hast wahrscheinlich
"m_playerClipSize" und "m_playerRestAmmo" in einer if-else-Abfrage erstellt
und nun verwendest du sie außerhalb dieser, was aber nicht möglich ist.

Masterside
22.08.2009, 20:38
@Pat21
Da ist der Teil:
http://www.abload.de/thumb/fehler2a2k8.jpg (http://www.abload.de/image.php?img=fehler2a2k8.jpg)

Habe einfach den Code den Blue mir gegeben hat, an die Stelle getan die er mir beschrieben hat.

Pat21
22.08.2009, 20:45
@ Masterside
Die Klammer hier:



else


m_playerAmmo = m_playerRestAmmo = -1;
}
...

muss an das Ende von




m_animMyFirstHud.Invoke("setAmmo", test02);

}
}


Nur so ne kleine Frage am Rande. Warum erstellst du den Code für diese Sachen wie "Ammo-Übergabe" usw nochmal ??
Du müsstest nur deine .swf Datei als "HUD_AmmoHealthEnergySuit.swf" exportieren mit passenden Funktionsnamen.
Crysis nutzt dann diese .gfx-Datei und du musst den ganzen Code nicht mehr neu machen.

Und wenn du weitere Funktionen aufrufen möchtest (in dieser .gfx Datei), dann nimmst du folgendes her:

m_animPlayerStats.Invoke("function", ...);

Das kannst du dann auch bei den anderen HUD-Teilen machen. Hier ist mal eine Liste davon:


m_animPlayerStats.Load("Libs/UI/HUD_AmmoHealthEnergySuit.gfx", eFD_Right, eFAF_Visible|eFAF_ThisHandler);
m_animAmmoPickup.Load("Libs/UI/HUD_AmmoPickup.gfx", eFD_Right, eFAF_Visible);
m_animFriendlyProjectileTracker.Load("Libs/UI/HUD_GrenadeDetect_Friendly.gfx", eFD_Center, eFAF_Visible);
if(!m_animFriendlyProjectileTracker.IsLoaded()) //asset missing so far ..
m_animFriendlyProjectileTracker.Load("Libs/UI/HUD_GrenadeDetect.gfx", eFD_Center, eFAF_Visible);
m_animHostileProjectileTracker.Load("Libs/UI/HUD_GrenadeDetect.gfx", eFD_Center, eFAF_Visible);
m_animMissionObjective.Load("Libs/UI/HUD_MissionObjective_Icon.gfx", eFD_Center, eFAF_Visible);
m_animQuickMenu.Load("Libs/UI/HUD_QuickMenu.gfx");
m_animRadarCompassStealth.Load("Libs/UI/HUD_RadarCompassStealth.gfx", eFD_Left, eFAF_Visible);

m_animNetworkConnection.Load("Libs/UI/HUD_Network_Icon.gfx", eFD_Center, eFAF_ThisHandler);

m_pHUDRadar->SetFlashRadar(&m_animRadarCompassStealth);
if(gEnv->bMultiplayer)
m_animHexIcons.Load("Libs/UI/HUD_HexIcons.gfx", eFD_Left, eFAF_Visible);
else
m_animHexIcons.Load("Libs/UI/HUD_SP_HexIcons.gfx", eFD_Left, eFAF_Visible);

m_animTacLock.Load("Libs/UI/HUD_Tac_Lock.gfx", eFD_Center, eFAF_ThisHandler);
m_animWarningMessages.Load("Libs/UI/HUD_ErrorMessages.gfx", eFD_Center, eFAF_ThisHandler|eFAF_ManualRender);
m_animOverlayMessages.Load("Libs/UI/HUD_OverlayMessage.gfx", eFD_Center, eFAF_ThisHandler|eFAF_ManualRender);
m_animBigOverlayMessages.Load("Libs/UI/HUD_OverlayMessageFading.gfx", eFD_Center, eFAF_ThisHandler|eFAF_ManualRender);
m_animHUDCornerLeft.Load("Libs/UI/HUD_Corner_Left.gfx", eFD_Left, eFAF_Visible);
m_animHUDCornerRight.Load("Libs/UI/HUD_Corner_Right.gfx", eFD_Right, eFAF_Visible);

//load the map
m_animWeaponSelection.Load("Libs/UI/HUD_WeaponSelection.gfx", eFD_Right, eFAF_Visible);
m_animPDA.Load("Libs/UI/HUD_PDA_Map.gfx", eFD_Right, eFAF_ThisHandler);
m_animDownloadEntities.Load("Libs/UI/HUD_DownloadEntities.gfx");
m_animHitIndicator.Load("Libs/UI/HUD_HitIndicator.gfx", eFD_Center, eFAF_Visible);

// these are delay-loaded elsewhere!!!
if(loadEverything)
{
m_animKillAreaWarning.Load("Libs/UI/HUD_Area_Warning.gfx", eFD_Center, true);
m_animDeathMessage.Load("Libs/UI/HUD_KillEvents.gfx", eFD_Center, true);
m_animGamepadConnected.Load("Libs/UI/HUD_GamePad_Stats.gfx");
m_animBreakHUD.Load("Libs/UI/HUD_Lost.gfx", eFD_Center, eFAF_ManualRender|eFAF_Visible);
m_animRebootHUD.Load("Libs/UI/HUD_Reboot.gfx", eFD_Center, eFAF_Visible|eFAF_ThisHandler);
}
else
{
m_animKillAreaWarning.Init("Libs/UI/HUD_Area_Warning.gfx", eFD_Center, true);
m_animDeathMessage.Init("Libs/UI/HUD_KillEvents.gfx", eFD_Center, true);
m_animGamepadConnected.Init("Libs/UI/HUD_GamePad_Stats.gfx");
m_animBreakHUD.Init("Libs/UI/HUD_Lost.gfx", eFD_Center, eFAF_Visible);
m_animRebootHUD.Init("Libs/UI/HUD_Reboot.gfx", eFD_Center, eFAF_Visible|eFAF_ThisHandler);
}

m_animWeaponAccessories.Load("Libs/UI/HUD_WeaponAccessories.gfx", eFD_Center, eFAF_ThisHandler);
if(loadEverything)
{
m_animCinematicBar.Load("Libs/UI/HUD_CineBar.gfx", eFD_Center, eFAF_ThisHandler|eFAF_ManualRender|eFAF_Visible);
m_animSubtitles.Load("Libs/UI/HUD_Subtitle.gfx", eFD_Center, eFAF_ThisHandler|eFAF_ManualRender|eFAF_Visible);
}
else
{
m_animCinematicBar.Init("Libs/UI/HUD_CineBar.gfx", eFD_Center, eFAF_ThisHandler|eFAF_ManualRender|eFAF_Visible);
m_animSubtitles.Init("Libs/UI/HUD_Subtitle.gfx", eFD_Center, eFAF_ThisHandler|eFAF_ManualRender|eFAF_Visible);
}

Masterside
24.08.2009, 13:31
Gut die Fehler sind weg, aber die Ammobar geht nicht Ingame

Blue
24.08.2009, 21:19
:shock: ojeoje - blue, es wird zeit das du in den urlaub gehst. :lol:

Nein das hat mir nicht die Gamescom gezeigt (naja schon ein wenig) - sondern der Müll den ich hier gepostet hab. xD Sry, Masterside. *kopfschüttel* Manchmal überschätze ich mich einfach selbst. Man sollte einfach nix ins Forum Posten ohne es davor zu testen - und wenn man es schon so macht, sollte man den Unsinn den man hier gepostet hat mal mit dem getesteten Code abgleichen!

Ich meine mal ehrlich - alleine schon hierfür hätten mich mein alter Mathe und mein Programmierlehrer seinerzeit einmal quer durch die Weltgeschichte und zurück geprügelt!



das wäre dann wohl sowas in der art (3satz, mein mathe lehrer sagte mir seinerzeit das ich es für irgendetwas gebrauchen könnte *g*):


int test01 =(int) (m_playerClipSize / 100)*m_playerRestAmmo;
m_animMyFirstHud.Invoke("setRestAmmo", test01); :hammer:
Hallo hallo? Warum lacht ihr denn bei so doppelt dämlichen Aussage nur still in euch hinnein anstatt mich gleich schallend auszulachen? :lol:
Das hat weder etwas mit dreisatz zu tun, noch kann bei ner normalen Integer division bei sowas etwas vernünftiges rauskommen. Einfach herlich, hab mich selbst so zum lachen gebracht das mir hier grad die Tränen laufen!

BtT: K dicker - hoffe dir sind wegen diesem blödsinn keine grauen Haare gewachsen. Hier "mein" Code vom Lappy, diesemal auch brav mit Copy&Paste auf Stick und nu auf den Pc direkt zu dir ins Forum:




void CHUD::UpdatePlayerAmmo()
{
if(!m_animPlayerStats.GetVisible())
{
m_playerAmmo = m_playerRestAmmo = -1; //forces update next time loaded
return;
}

if(!(m_pHUDVehicleInterface && m_pHUDVehicleInterface->GetHUDType() != CHUDVehicleInterface::EHUD_NONE))
{
int ammo = 0;
int clipSize = 0;
int restAmmo = 0;
CryFixedStringT<128> grenadeType;
int grenades = 0;

CPlayer *pPlayer = static_cast<CPlayer*>(gEnv->pGame->GetIGameFramework()->GetClientActor());
if(pPlayer)
{
IItem *pItem = pPlayer->GetCurrentItem(false);
if(pItem)
{
if(CWeapon *pWeapon = static_cast<CWeapon*>(pItem->GetIWeapon()))
{
int fm = pWeapon->GetCurrentFireMode();
if(IFireMode *pFM = pWeapon->GetFireMode(fm))
{
ammo = pFM->GetAmmoCount();
if(IItem *pSlave = pWeapon->GetDualWieldSlave())
{
if(IWeapon *pSlaveWeapon = pSlave->GetIWeapon())
if(IFireMode *pSlaveFM = pSlaveWeapon->GetFireMode(pSlaveWeapon->GetCurrentFireMode()))
ammo += pSlaveFM->GetAmmoCount();
}
clipSize = pFM->GetClipSize();
restAmmo = pPlayer->GetInventory()->GetAmmoCount(pFM->GetAmmoType());

if(pFM->CanOverheat())
{
int heat = int(pFM->GetHeat()*100.0f);
m_animPlayerStats.Invoke("setOverheatBar", heat);
}
}
}
}

IItem *pOffhand = g_pGame->GetIGameFramework()->GetIItemSystem()->GetItem(pPlayer->GetInventory()->GetItemByClass(CItem::sOffHandClass));
if(pOffhand)
{
int firemode = pOffhand->GetIWeapon()->GetCurrentFireMode();
if(IFireMode *pFm = pOffhand->GetIWeapon()->GetFireMode(firemode))
{
if(pFm->GetAmmoType())
{
grenadeType = pFm->GetAmmoType()->GetName();
if(pPlayer)
grenades = pPlayer->GetInventory()->GetAmmoCount(pFm->GetAmmoType());
}
else //can happen during object pickup/throw
{
grenadeType.assign(m_sGrenadeType, m_sGrenadeType.length());
grenades = m_iGrenadeAmmo;
}
}
}
}

//BLUE09
IItem * pItem = gEnv->pGame->GetIGameFramework()->GetClientActor()->GetCurrentItem();
if(CWeapon *pWeapon = static_cast<CWeapon*>(pItem->GetIWeapon()))
{
IFireMode *pFM = pWeapon->GetFireMode(pWeapon->GetCurrentFireMode());
IEntityClass *pEC = pFM->GetAmmoType();
int iRA = gEnv->pGame->GetIGameFramework()->GetClientActor()->GetInventory()->GetAmmoCapacity(pEC);
iRA > 0 ? iRA =(int) restAmmo/static_cast<double>((iRA/100)) : NULL;
iRA <= 0 ? iRA = 1 : NULL;
m_animMyFirstHud.Invoke("setRestAmmo", iRA);
if(clipSize > 0)
{
int iA = (int) ammo/static_cast<double>((clipSize / 100.0f));
iA <= 0 ? iA = 1 : NULL;
m_animMyFirstHud.Invoke("setAmmo", iA);
}
else m_animMyFirstHud.Invoke("setAmmo", 1);
}

if(m_playerAmmo == -1) //probably good to update fireMode
{
SetFireMode(NULL, NULL);
m_animPlayerStats.Invoke("setAmmoMode", 0);
}

if(m_playerAmmo != ammo || m_playerClipSize != clipSize || m_playerRestAmmo != restAmmo ||
m_iGrenadeAmmo != grenades || grenadeType.compare(m_sGrenadeType) != 0)
{
SFlashVarValue args[7] = {0, ammo, clipSize, restAmmo, grenades, grenadeType.c_str(), true};
m_animPlayerStats.Invoke("setAmmo", args, 7);
m_playerAmmo = ammo;
m_playerClipSize = clipSize;
m_playerRestAmmo = restAmmo;
m_iGrenadeAmmo = grenades;
m_sGrenadeType.assign(grenadeType.c_str()); // will alloc
}
}
else
m_playerAmmo = m_playerRestAmmo = -1; //forces update next time outside vehicle
}




gruß Blue

:arofl:

Flow groover
10.02.2010, 17:00
Also im grunde genommen wollte ich blos das das startmenü so wie im Living Hell Mod einfach unter Crysis halt was steht..
welche datei muss ich dafür verändern/öffnen?

Pat21
10.02.2010, 18:42
@ Flow groover
"Menus_StartMenu.swf" bzw "Menus_IngameMenu.swf" (der Name verrät es ja eigentlich schon ;))

Flow groover
10.02.2010, 19:27
Ja, klar tut er das, aber ich kann da iwi nichts ändern, und es ist alles schwarz dargestellt. (ist wahrscheiunlich auch korrekt, aber wie kann ich da was ändern?^^)

Hab Flash CS4
ist das ein unterschied?

Pat21
10.02.2010, 19:37
@ Flow groover
1. Die Datei ist so. Du musst dich damit einfach beschäftigen und ein bisschen testen. :roll:
2. Diese Konversation sollte man in einen anderen Thread verlagern, da diese nichts mehr mit der Mod zu tun hat.

Flow groover
10.02.2010, 19:41
Gibt es aber eine Möglichkeit das man etwas erkennen kann?


-pat, kannst du bitte mal alles vom HUD zeug her, hier hin verschieben?

Pat21
10.02.2010, 19:42
@ Flow groover
zu 1. Ne, in der Menu-Datei geht das nicht wirklich.
zu 2. Nope, das kann ich leider net....aber ich kümmer mich drum. ;)

Flow groover
10.02.2010, 20:01
1.Ja, aber ich kann iwie die tolls wie normal leider nicht benutzen, und in der leiste steht " .... HUD Ingameirgendwas loading failed" muss das so sein?

StatistNr103
10.02.2010, 20:40
Hey , ich hätte noch drei kritische Fragen/Anmerkungen zur Mod (Spoiler-Alert!)

Wieso befinden sich die Sniping-Ziele eigentlich mutterseelenallein auf Bergspitzen? xD
und
WAS HABT IHR EUCH EIGENTLICH DABEI GEDACHT, NOMAD ALS KYONGS ZWILLINGSBRUDER DARZUSTELLEN??? :lol:
Mein Blick an der Stelle war nur noch o.O ...
außerdem
Wieso genau schlägt Psycho Nomad im Flugzeug eigentlich nieder...?

AndyIII
10.02.2010, 20:46
;)

Nun, das hatte nich so viel sinn, sollte einen nur dazu bringen dass man sich etwas umschaut ;)

Keine ahnung, spontan :p
Aber da gab es ja mehrere sachen, z.b dass da flugzeug von einem alien geflogen wird o.O

Nomad wird nieder geschlagen, weil 1. Er zu beginn von Crysis ohnmächtig ist, und 2. Nomad Psycho damit nervt dass er lieber nach hause will als auf eine neue mission ;)

StatistNr103
10.02.2010, 21:03
Ich habe 10 Minuten die Umgebung abgegrast, bis ich mal nach oben geschaut habe, und was seh ich? Einen Soldaten auf einer Bergspitze, in rotes Licht gehüllt :lol:

Das mit dem Alien fand ich auch gut ^^

Ich weiß, dass er zu Beginn von Chrysis ohnmächtig war. Ich war nur verwundert, weil Nomad und Psycho im Spiel gute Kumpels sind, und da passt es irgendwie nicht, dass Psycho seinen Freund nur wegen zwei Bemerkungen k.o. schlägt :D

Verzeiht den Doppelpost, aber eine Sache noch, die ich unbedingt loben muss:

DIE MUSIK!!!

Die war eine der besten Sachen bei der Mod. Allen voran das Thema, welches auch Flow in seinem Outpost-Trailer verwendet hat (ihr wisst schon...), sowas von EPIC!!!

Flow groover
14.02.2010, 13:22
Gehört das nicht in den Living Hell Thread? Ich glaub da ist was mächtig in die Hose gegangen...

Ich habn Problem, ich will eine .gfx öffnen, aber ich kanns mit Adobe Flash nicht öffnen:
http://www.abload.de/img/sdvofxd2w.jpg

Hamers
14.02.2010, 14:34
Man kann keine gfx Dateien mit Flash öffnen. ;)

Du kannst nur fla Dateien öffnen, die von Crysis kannst du auf Crymod herunterladen, da du das aber schon wusstest, nehme ich an, du willst eine Flash Datei aus einer bestimmten Mod öffnen. Damit wäre ich vorsichtig, denn niemand sollte die Arbeit eines anderen stehlen.
Wenn du nur studieren willst, geht das natürlich in Ordnung, aber dann musst du wohl die jeweiligen Leute anschreiben und um die fla Datei bitten :)

Flow groover
14.02.2010, 14:50
wasn sch. is ja wie mit den .cry files...
Ich weis eigentlich nix übers Coden, ich wills ja lernen8-)
Kannst d mir bitte nen Link zu denn Crymod Files geben?

Pat21
14.02.2010, 16:27
@ Flow groover
Hätte man durch Suchen auch selber finden können. ;)
http://wiki.crymod.com/index.php/Fixing_the_Decompiled_Flash_Files

Flow groover
14.02.2010, 17:19
OK hab ales hinbekommen, wie bekomme ich jetzt eine .gfx?
ich habe es als .swf exportiert, und nun?

Pat21
14.02.2010, 17:58
@ Flow groover
Einfach in .gfx umbenennen.

Flow groover
14.02.2010, 18:51
Gibts ne möglichkeit das Flash keine 2 Minuten braucht um eine Aktion durch zuführen?
Das ist auch nur bei den Crytek sachen so...

befubo
20.05.2010, 20:04
Hi Leute, hab da mal ne Frage ^^

Ich habe dieses HUD Tut mal durchgemacht und eig ist alles i.o. ABER:
Ich krieg das nicht ganz gerafft:



var m_health = 100;

setHealth = function(_health)
{

var health = Math.floor((Math.max(_health,0)));

if(m_health!=health)
{
m_health = health;

// modify this line to suit your folder structure.

yourfolderstructure.gotoAndStop(m_health);
}
}


Was muss ich da genau angeben?
thx

Masterside
20.05.2010, 21:00
Du hast ja deiner Healthbar einen Namen gegeben als du diese in ein movieclip konvertiert hast. Diesen musst du da eintragen.

befubo
20.05.2010, 21:50
Ahh, cool. danke, stimt.
Und noch ne 2. Frage:

Ist es Möglich, Crysis immer gleich mit MOD zu starten, weil immer wieder das spiel neustarten nervt iwie...?

Masterside
20.05.2010, 21:55
Verknüpfung erstellen. und bei Ziel: -MOD MODNAME hinzufügen

befubo
20.05.2010, 22:34
thx a lot. und wenn ich gleich dabei bin, hoffe, du kannst mir hier auch weiterhelfen. Ich hab den Code von Blue gelesen, der ist aber n bissl komplex (für einen Quereinsteiger XD)
Jetzt meine Frage:

Ich möchte einfach nur die Aktuelle Munitionsanzeige und Restmunition. Also einfach 2 dynamische Textfelder, welche die Angaben anzeigen. Kann mir das vileicht jemand aud dem längeren Post früher in diesem Threat rausfiltern?

Pat21
21.05.2010, 08:07
@ befubo
Das dürfte dir dabei helfen. Da wird das, was du machen möchtest, teilweise beschrieben.
http://wiki.crymod.com/index.php/Creating_a_HUD

befubo
21.05.2010, 09:46
Dank dir.
Hab jetzt keine Möglichkeit, das ganze zu testen, aber hier mal dass, was ich rausgefiltert habe. Würde das etwa funktionieren?:


var m_health = 100;

setHealth = function(_health)
{

var health = Math.floor((Math.max(_health,0)));

if(m_health!=health)
{
m_health = health;

healthbar.health.gotoAndStop(m_health);
}
}

var m_energy = 100;

setEnergy = function(_energy)
{

var energy = Math.floor((Math.max(_energy,0)));

if(m_energy!=energy)
{
m_energy = energy;

healthbar.powerbar.gotoAndStop(m_energy);
}
}



m_animPlayerStats.Load("Libs/UI/HUD_AmmoHealthEnergySuit.gfx", eFD_Right, eFAF_Visible|eFAF_ThisHandler);

function setAmmo(iSomething:Number, iAmmo:Number, iClipSize:Number,
iRestAmmo:Number, iGrenadeAmmo:Number, sGrenadeType:String, bPlayer:Boolean)
{
Root.ammo_txt.text = iAmmo;
Root.rest_txt.text = iRestAmmo;
}

Ich habe einen MC namens "Root" und darin befinden sich 2 dynamische Textfelder mit dem Instanznamen "rest_txt" und "ammo_txt".

Die Healthbar und die Powerbar funktionieren, die konnt ich gestern noch testen ;)

Pat21
21.05.2010, 09:58
@ befubo
Joa, das dürfte eigentlich funktionieren.


m_animPlayerStats.Load("Libs/UI/HUD_AmmoHealthEnergySuit.gfx", eFD_Right, eFAF_Visible|eFAF_ThisHandler);
Der Teil befindet sich aber nicht in deinem Flash-Code, oder ? Das ist nämlich C++ Code.

befubo
21.05.2010, 13:15
sorry, hab alles bereinigt. In die Richtung iss mir jetzt eigentlich alles klar. Jetzt hab ich aber noch ne weiterführende Frage:

Kann ich z.B. einen HUD Button erstellen, dann per FG aufrufen (Also so input:key mässig) und dann erscheit erwähhnter Button (oder irgend eine Flash anwendung). Dort soll man wie bei der Waffenaufsatzwahl mit der Maus etwas auswählen können und iwie einen Wert zurück zum FG senden?

Als Beispiel:
Ich hab mal ne MOD gesehen, da kam jemand an eine Türsteuerung und dann öffnete sich ein HUD Element, wo man per Maus die Zahlen auswählen kann und die richtige Kombo öffnet dann die Türe.

Das ist jetzt ein Beispiel, ich plane was anderes, soll aber in diesem Prinzip funktionieren...
Tipps?
thx a lot

Pat21
21.05.2010, 13:19
@ befubo
Möglich ist das alle mal. Dazu müsstest du dir aber ein eigenes "FG-Node" erstellen, welches dann die richtige "Flash-Datei" erscheinen lässt
und auch die Inputs verarbeitet. Du könntest es aber auch mal mit dem Flash-Node aus dem "FG-Plugin-System" versuchen, bei dem es aber
denke ich zu Schwierigkeiten kommen wird.

befubo
21.05.2010, 13:40
Hmm, FG-Node... ok. Gibts da iwo Tuts die ich mal durcharbeiten kann? Weil es währe mir ein Anliegen, das ganze etwas beherrschen zu können...

Masterside
21.05.2010, 13:44
http://wiki.crymod.com/index.php/Custom_Flow_Nodes_in_C%2B%2B

Das ist nur C++, du bräuchtest auch noch ActionScript 2.0 Code.
Außerdem zeigt das Tut nur wie man ein Node per C++ erstellt.

befubo
11.06.2010, 10:46
Hab da noch ne Frage:




function setAmmo(iSomething:Number, iAmmo:Number, iClipSize:Number,
iRestAmmo:Number, iGrenadeAmmo:Number, sGrenadeType:String, bPlayer:Boolean)
{
var ammo = iAmmo;
var restammo = iRestAmmo;
ammobar.gotoAndStop(ammo);
Root.rest_txt.text = iRestAmmo;

}

Ich hab nen MC namens "ammobar" und dort hats ne Zeitleiste, welche bis auf 40 geht... (40 Keyframes) Funktioniert dass so, dass es immer bei dem Keyframe stehen bleibt, wie ich noch Munition habe?
Also ich habe noch 25 Schuss... bleibts dann beim 25. Keyframe stehen?


thx

befubo
15.06.2010, 07:36
Sorry für Doppelpost, aber isses möglich, dass niemand mein Edit bemerkt hat? ^^ thx

Horst
15.06.2010, 08:18
Hab da noch ne Frage:




function setAmmo(iSomething:Number, iAmmo:Number, iClipSize:Number,
iRestAmmo:Number, iGrenadeAmmo:Number, sGrenadeType:String, bPlayer:Boolean)
{
var ammo = iAmmo;
var restammo = iRestAmmo;
ammobar.gotoAndStop(ammo);
Root.rest_txt.text = iRestAmmo;

}Ich hab nen MC namens "ammobar" und dort hats ne Zeitleiste, welche bis auf 40 geht... (40 Keyframes) Funktioniert dass so, dass es immer bei dem Keyframe stehen bleibt, wie ich noch Munition habe?
Also ich habe noch 25 Schuss... bleibts dann beim 25. Keyframe stehen?


thx

davon ausgehen das der Wert der mit iAmmo übergeben wird die menge an munition ist die du noch hast wird der mc immer an den Frame bewegen der der deiner ammo menge entspricht

befubo
15.06.2010, 09:42
Hi
habs mal versucht, allerdings passiert... nichts...
Es bleibt einfach immer beim Frame "1" stehen... komisch

spYder
30.07.2010, 09:15
kann ich bereits für crysis exportierte gfx files nochmal mit flash öffnen.?

übrigends habe ich ein swf gefunden, wie importiere ich dieses.? ich bekomme da dauernd eine fehlermeldung. :-(

Pat21
30.07.2010, 09:49
@ spYder
zu 1. Nein, kannst du nicht.
zu 2. .swf inklusive Codes usw kann man in Adobe Flash nicht mehr öffnen. Man braucht dazu die .fla

spYder
30.07.2010, 09:58
hab gehört, dass man gfx files in fla decompilen kann. also sollte das dann doch gehen. :-(

Pat21
30.07.2010, 10:09
@ spYder
Erstmal zum klar stellen. Gfx-Files sind eigentlich nur umbenannte swf-Files und ja, man kann diese decompilien, aber dafür braucht man
halt nen anderes Programm (das geht eben nicht mit Adobe Flash), aber warum lädst du dir denn nicht die decompiled "Crysis-Hud-Files" (http://wiki.crymod.com/index.php/Fixing_the_Decompiled_Flash_Files) herunter ?

spYder
30.07.2010, 10:13
@ spYder
Erstmal zum klar stellen. Gfx-Files sind eigentlich nur umbenannte swf-Files und ja, man kann diese decompilien, aber dafür braucht man
halt nen anderes Programm (das geht eben nicht mit Adobe Flash), aber warum lädst du dir denn nicht die decompiled "Crysis-Hud-Files" (http://wiki.crymod.com/index.php/Fixing_the_Decompiled_Flash_Files) herunter ?

ja. hab eben diesen thread gefunden.: http://crymod.com/thread.php?threadid=31147

werd mich heute dann mal dransetzten und herumprobieren.

danke trotzdem.


BTW:

bekomme ich das auch noch in den Adobe Flash? http://www.gyroby.atw.hu/downloads/Untitled-1.swf


werde mich hier wieder melden, wenn was nicht ganz funzen sollte.. :wink:

Masterside
30.07.2010, 11:57
@spyder
Klar. Du müsstes die datei iwie nur runter laden und dann damit:
http://swf-to-fla-converter.softonic.de/
konventieren.

Das Pro ist aber nur Trial

spYder
30.07.2010, 12:00
@spyder
Klar. Du müsstes die datei iwie nur runter laden und dann damit:
http://swf-to-fla-converter.softonic.de/
konventieren.

Das Pro ist aber nur Trial

danke.

habe jetzt dem SWF-Decompiler von Sothink. :wink:

Flow groover
07.08.2010, 12:30
Ich hab ne Frage, ich hab mir das Source Code Pack für Crysis Wars gedownloadet, aber das Archiv ist im .7z Format. Als ich das sah, habe ich mir 7ZIP gedownloadet, aber damit kann ich das Archiv auch nicht öffnen?
Ist das bei anderen auch so?
Ich meine die Cryis Files tun es auch, aber die von Crysis Wars würde ich mir auch gerne ansehen.. :-?

befubo
13.10.2010, 13:55
Hi Leute
Schon lange her seit dem letzten Post ^^
Mal ne Frage:
Ist es iwie möglich ein neues HUD-Element zu erstellen?
Also es gibt ja z.B. eine HUDAmmoHealthBar.gfx (oder was auch immer) und eine HUDMissonObjectives.gfx usw...
Kann ich im Game iwie eine neue gfx definieren wie z.B. HUDUnitBar.gfx oder so
Also ein eigenständiges HUD Element?
thx

Pat21
13.10.2010, 14:36
@ befubo
Ja kannst du. Musst nur im C++-Code dann nen passenden Verweis erstellen, so dass dieses Element dann auch geladen wird.

@ Flow goover
Dann lade es dir nochmal runter. Das müsste es nämlich auch als .zip/.rar geben.

Flow groover
13.10.2010, 14:39
@ befubo
Ja kannst du. Musst nur im C++-Code dann nen passenden Verweis erstellen, so dass dieses Element dann auch geladen wird.

gut das du das sagst, wie genau geht das? oder in welcher .cpp muss ich schauen?
Ich konnte es in keiner .cpp finden :-(

befubo
13.10.2010, 14:48
danke und *sich-Flow-Groovers-Frage-anschliess*

Pat21
13.10.2010, 15:04
@ befubo & Flow groover
Ihr müsstest in der HUD.h eine neue "CGameFlashAnimation" definieren. Schaut euch dazu mal Zeilen "644 - 689" an. (Crysis-SourceCode). Wenn ihr dies gemacht habt, dann müsst ihr in der HUD.cpp in der Funktion CHUD::Init() (ab Zeile 405 (Beispiele ab Zeile 447)) noch eine weiter Zeile hinzufügen wie z.B.

m_animTestSWF->Load(Pfad zu der Datei, eFD_Center, eFAF_Default)
"eFD_Center" könnt ihr auch durch andere Position vertauschen. Schaut euch dazu einfach mal das Enum "EFlashDock" in der "FlashAnimation.h" an. Genauso könnt ihr auch die Flags (in meinen Beispiel eFAF_Default) ändern. Schaut euch dazu einfach mal das Enum "EFlashAnimFlags" in der "GameFlashAnimation.h" an.

Masterside
13.10.2010, 15:47
Gibt es nicht auf crywiki ein Tutorial zum Erstellen eigener HUD Elemente.

befubo
14.10.2010, 23:23
Hey zusammen
Nach einem neuen Anlauf hab ich mal einen Entwurf eines neuen HUDs gemacht. Ich hab noch nicht viel realisiert, aber eure Meinung währe mir mal wichtig:
Ich habe das HUD mal in zwei Grössen gemacht und mir gefällt das kleinere besser. Aber es ist eher "unrealistisch" da es eben, kleiner ist ^^
aber seht selbst:

http://www.youtube.com/watch?v=_qQtOj2dQDw

damit ich weiterarbeiten kann und nicht in eine Sackgasse arbeite; Was findet ihr besser?
thx und lg
befubo

MAGIC
15.10.2010, 00:32
Sieht als Anfang schon gut aus
Wenn du das noch kompakter machst isses gut.
Acja ich finde das größere besser

befubo
15.10.2010, 07:23
ok, danke
Aber könntest du "kompakter" noch etwas genauer definieren?
Es kommen ja noch andere angaben da rein, z.B. werde ich die Alertstufe dort einbauen und auch die aktuelle Waffenauswahlanzeige.
Es kommen also noch einige Infos rein.
thx

MAGIC
15.10.2010, 09:36
Ich meine mit "kompakter" dass du das übersichtlich darstellst, also dass das nicht so ein Rahmen enthält...(ich kenn mmich ja nicht so aus, aber villeicht is das mit Rahmen einfacher).
Wenn da aber noch Alertsstufen reinkommen dann brauchst du doch das große oder??
Naja ich schau dein Fortschritt weiter an und viel Erfolg!!

Flow groover
15.10.2010, 10:27
Ich finde das HUD (kleinere) ganz gut, ich würde es vlt estwas kompakter machen wie MAGIC sagt, also das du nicht so viel platz brauchst, sondern das alles ein bisschen näher beeinander ist.
Weil auf den ersten Blick muss man erstmal schauen das man sieht wo was ist,
aber auf dauer ist es nur eine gewöhnungssache. Finde das HUD mit dem Männlein cool :) Also musst schaun ob dus noch ändern willst, is ja wie gesagt ne gewöhnungssache da man sich erstmal vom kleinen crysis hud unten rechts aufs große oben rechts gewöhnen muss.

befubo
15.10.2010, 10:55
^^ ok, danke erstmal euch beiden

Ich hab im Moment im Editor nur dieses HUD und man gewöhnt sich relativ schnell daran. Dadurch, dass es auch etwas "sperrig" ist, wird das spielen noch spannender, weil man tote Winkel kriegt xD

Das mit dem kompakter kommt sowieso, das ja noch einige Infos rein müssen.
Auch die Waffenauswähl werde ich einbauen. Aber das kommt noch ;)

Das grüne Männlein hat auch einen Sinn:
Die Layer für die Trefferpositionen hab ic schon gemacht. Also wenn du am kopf getroffen wirst, zeigt das HUD auf dem Männchen an, dass du einen Kopftreffer erhalten hast... Beine, Arme und Rumpf ebenfalls ;)
Aber das mit der Datenauswertung innhalb des Codes wo der Treffer nun stattgefunden hat muss ich noch erarbeiten...

MAGIC
15.10.2010, 11:00
Also das mit dem Männlein find ich cool..
Kann das sein dass neben dem Männlein (xDD Männlein^^) die Anzeige für die Magazine is???

befubo
15.10.2010, 11:15
Wenn du dich im Video mal achtest, die Magazine werden oben in Form von einzelnen Bullets angezeigt.
Ich bin inzwischen auf einem neuen Stand; rechts vom "Männlein" befinden sich die Granatenanzahl (mittels symolen wie bei der Munition gemacht). Je nach ausgewählter Granate werden die entsprechenden Symbole angezeigt.

werde ich (denk ich jetzt mal) in form von "Wellen" über dem gesammten HUD machen.
Also wenn die AI leicht alarmiert ist, ist es ganz schwach und bei voller Erkennung realtiv stark.
Es soll dann wie eine Art Radarwellen aussehen, welche dann in kreisform vom Zentrum des Huds nach aussen gehen.
Beim nächten Update hab ichs dann vllt. schon drin ^^

EDIT:
So und folgend eine Frage betreffend diesem Vorhaben:
gibt es eine Flashfunktion um abzufragen, an welchem Körperteil der Player getroffen wurde?
Sowieso; gibt es iwo eine liste mit den C++ definitionen für die Flashabfragen?
thx

Pat21
15.10.2010, 12:14
@ befubo
Was für Flash-Abfragen meinst du ?

befubo
15.10.2010, 12:30
Also z.B. folgendes:


function setAmmo(iSomething:Number, iAmmo:Number, iClipSize:Number,

iRestAmmo:Number, iGrenadeAmmo:Number, sGrenadeType:String, bPlayer:Boolean)
{
Root.Ammo.ammo_txt.text = iAmmo;
}


Ich frage ja nach function setAmmo ab. Das übergibt mir Werte wie iAmmo, iRestAmmo usw...
Es gibt ja für alles mögliche eine Abfrage... Die Gesundheit, Power, Munition usw...
Gibts da eine Liste, wie die Ansprechvariabeln heissen?

Pat21
15.10.2010, 12:50
@ befubo
Nein, dazu gibt es keine Liste. Müsstest dir die Funktionen in den Crysis-Dateien anschauen bzw mal im Crysis-Source-Code schauen, was so alles übergeben wird.

befubo
15.10.2010, 12:53
Phuu, ok.
Demfall, mal sehen, vielleicht bin ich derjenige, der sich ne Höllenarbeit macht, alle rauszuschreiben xD
mal weiss ja nie ;)
aber danke ^^

befubo
15.10.2010, 15:22
Hier mal ein Ausschnitt aus der HUD.h Datei:






void CHUD::UpdateTeamActionHUD()
{
if (CGameRules *pGameRules=g_pGame->GetGameRules())
{
if (pGameRules->IsRoundTimeLimited() && !stricmp(pGameRules->GetEntity()->GetClass()->GetName(), "TeamAction"))
{
IEntityScriptProxy *pScriptProxy=static_cast<IEntityScriptProxy *>(pGameRules->GetEntity()->GetProxy(ENTITY_PROXY_SCRIPT));
if (pScriptProxy)
{
bool preround=false;
int remainingTime=-1;
if (!stricmp(pScriptProxy->GetState(), "InGame"))
{
remainingTime = (int)(pGameRules->GetRemainingRoundTime());
}
else if (!stricmp(pScriptProxy->GetState(), "PreRound"))
{
preround=true;
remainingTime = (int)(pGameRules->GetRemainingPreRoundTime());
}

if (remainingTime>-1)
{
int minutes = (remainingTime)/60;
int seconds = (remainingTime - minutes*60);
string msg;
msg.Format("%02d:%02d", minutes, seconds);

Vec3 color=Vec3(1.0f, 1.0f, 1.0f);

if (remainingTime<g_pGameCVars->g_suddendeathtime || preround)
{
float t=fabsf(cry_sinf(gEnv->pTimer->GetCurrTime()*2.5f));
Vec3 red=Vec3(0.85f, 0.0f, 0.0f);

color=color*(1.0f-t)+red*t;
}

m_pUIDraw->DrawText(m_pDefaultFont,0,12,22,22,msg.c_str(),0.8 5f,color.x,color.y,color.z,UIDRAWHORIZONTAL_CENTER ,UIDRAWVERTICAL_TOP,UIDRAWHORIZONTAL_CENTER,UIDRAW VERTICAL_TOP);
}
int key0;
int nkScore = 0;
int usScore = 0;
IScriptTable *pGameRulesScript=pGameRules->GetEntity()->GetScriptTable();
if (pGameRulesScript && pGameRulesScript->GetValue("TEAMSCORE_TEAM0_KEY", key0))
{
pGameRules->GetSynchedGlobalValue(key0+1, nkScore);
pGameRules->GetSynchedGlobalValue(key0+2, usScore);
}
if (pGameRules->IsRoundTimeLimited() && !stricmp(pGameRules->GetEntity()->GetClass()->GetName(), "TeamAction"))
{
IActor *pClientActor=g_pGame->GetIGameFramework()->GetClientActor();
if(!pClientActor)
return;
int clientTeam = pGameRules->GetTeam(pClientActor->GetEntityId());

CGameRules::TPlayers nkPlayers, usPlayers;
pGameRules->GetTeamPlayers(1, nkPlayers);
pGameRules->GetTeamPlayers(2, usPlayers);

int numNK = 0;
int numUS = 0;
for(int i=0; i<nkPlayers.size(); ++i)
{
IActor* pActor = g_pGame->GetIGameFramework()->GetIActorSystem()->GetActor(nkPlayers[i]);
if(pActor && pActor->GetHealth() > 0)
++numNK;
}
for(int i=0; i<usPlayers.size(); ++i)
{
IActor* pActor = g_pGame->GetIGameFramework()->GetIActorSystem()->GetActor(usPlayers[i]);
if(pActor && pActor->GetHealth() > 0)
++numUS;
}

if(clientTeam != 0)
{
string nkPlayers;
string usPlayers;
string nkScoreText;
string usScoreText;
for(int i=0; i<nkScore; ++i)
nkScoreText += "*";
for(int i=0; i<usScore; ++i)
usScoreText += "*";

if(clientTeam == 1)
{
nkPlayers.Format("NK: %d", numNK);
usPlayers.Format("%d :US", numUS);
m_pUIDraw->DrawText(m_pDefaultFont, -40, 5, 22, 22, nkScoreText.c_str(), 0.85f, 1.0f, 1.0f, 1.0f, UIDRAWHORIZONTAL_CENTER, UIDRAWVERTICAL_TOP, UIDRAWHORIZONTAL_RIGHT,UIDRAWVERTICAL_TOP);
m_pUIDraw->DrawText(m_pDefaultFont, 40, 5, 22, 22, usScoreText.c_str(), 0.85f, 1.0f, 1.0f, 1.0f, UIDRAWHORIZONTAL_CENTER, UIDRAWVERTICAL_TOP, UIDRAWHORIZONTAL_LEFT,UIDRAWVERTICAL_TOP);
m_pUIDraw->DrawText(m_pDefaultFont, -40, 12, 22, 22, nkPlayers.c_str(), 0.85f, 1.0f, 1.0f, 1.0f, UIDRAWHORIZONTAL_CENTER, UIDRAWVERTICAL_TOP, UIDRAWHORIZONTAL_RIGHT,UIDRAWVERTICAL_TOP);
m_pUIDraw->DrawText(m_pDefaultFont, 40, 12, 22, 22, usPlayers.c_str(), 0.85f, 1.0f, 1.0f, 1.0f, UIDRAWHORIZONTAL_CENTER, UIDRAWVERTICAL_TOP, UIDRAWHORIZONTAL_LEFT,UIDRAWVERTICAL_TOP);
}
else
{
nkPlayers.Format("%d :NK", numNK);
usPlayers.Format("US: %d", numUS);
m_pUIDraw->DrawText(m_pDefaultFont, -40, 5, 22, 22, usScoreText.c_str(), 0.85f, 1.0f, 1.0f, 1.0f, UIDRAWHORIZONTAL_CENTER, UIDRAWVERTICAL_TOP, UIDRAWHORIZONTAL_RIGHT,UIDRAWVERTICAL_TOP);
m_pUIDraw->DrawText(m_pDefaultFont, 40, 5, 22, 22, nkScoreText.c_str(), 0.85f, 1.0f, 1.0f, 1.0f, UIDRAWHORIZONTAL_CENTER, UIDRAWVERTICAL_TOP, UIDRAWHORIZONTAL_LEFT,UIDRAWVERTICAL_TOP);
m_pUIDraw->DrawText(m_pDefaultFont, -40, 12, 22, 22, usPlayers.c_str(), 0.85f, 1.0f, 1.0f, 1.0f, UIDRAWHORIZONTAL_CENTER, UIDRAWVERTICAL_TOP, UIDRAWHORIZONTAL_RIGHT,UIDRAWVERTICAL_TOP);
m_pUIDraw->DrawText(m_pDefaultFont, 40, 12, 22, 22, nkPlayers.c_str(), 0.85f, 1.0f, 1.0f, 1.0f, UIDRAWHORIZONTAL_CENTER, UIDRAWVERTICAL_TOP, UIDRAWHORIZONTAL_LEFT,UIDRAWVERTICAL_TOP);
}
}
}
}
}
}
}

//-----------------------------------------------------------------------------------------------------

void CHUD::RequestRevive()
{
CPlayer *pPlayer = static_cast<CPlayer*>(gEnv->pGame->GetIGameFramework()->GetClientActor());
if(pPlayer && pPlayer->GetHealth()<=0)
pPlayer->GetPlayerInput()->OnAction(g_pGame->Actions().attack1, eAAM_OnPress, 1.0f);
}

//-----------------------------------------------------------------------------------------------------

void CHUD::UpdatePlayerAmmo()
{
if(!m_animPlayerStats.GetVisible())
{
m_playerAmmo = m_playerRestAmmo = -1; //forces update next time loaded
return;
}

if(!(m_pHUDVehicleInterface && m_pHUDVehicleInterface->GetHUDType() != CHUDVehicleInterface::EHUD_NONE))
{

int ammo = 0;
int clipSize = 0;
int restAmmo = 0;
CryFixedStringT<128> grenadeType;
int grenades = 0;
bool TACLauncherMode = false;

CPlayer *pPlayer = static_cast<CPlayer*>(gEnv->pGame->GetIGameFramework()->GetClientActor());
if(pPlayer)
{
IItem *pItem = pPlayer->GetCurrentItem(false);
if(pItem)
{
if(CWeapon *pWeapon = static_cast<CWeapon*>(pItem->GetIWeapon()))
{

IEntityClass *tacgun = gEnv->pEntitySystem->GetClassRegistry()->FindClass("TACGun");
if(pItem->GetEntity() && pItem->GetEntity()->GetClass()==tacgun)
{
TACLauncherMode = true;
}

int fm = pWeapon->GetCurrentFireMode();
if(IFireMode *pFM = pWeapon->GetFireMode(fm))
{
ammo = pFM->GetAmmoCount();
if(IItem *pSlave = pWeapon->GetDualWieldSlave())
{
if(IWeapon *pSlaveWeapon = pSlave->GetIWeapon())
if(IFireMode *pSlaveFM = pSlaveWeapon->GetFireMode(pSlaveWeapon->GetCurrentFireMode()))
ammo += pSlaveFM->GetAmmoCount();
}
clipSize = pFM->GetClipSize();
restAmmo = pPlayer->GetInventory()->GetAmmoCount(pFM->GetAmmoType());

if(pFM->CanOverheat())
{
int heat = int(pFM->GetHeat()*100.0f);
m_animPlayerStats.Invoke("setOverheatBar", heat);
}
}
}
}

IItem *pOffhand = g_pGame->GetIGameFramework()->GetIItemSystem()->GetItem(pPlayer->GetInventory()->GetItemByClass(CItem::sOffHandClass));
if(pOffhand)
{
int firemode = pOffhand->GetIWeapon()->GetCurrentFireMode();
if(IFireMode *pFm = pOffhand->GetIWeapon()->GetFireMode(firemode))
{
if(pFm->GetAmmoType())
{
grenadeType = pFm->GetAmmoType()->GetName();
if(pPlayer)
grenades = pPlayer->GetInventory()->GetAmmoCount(pFm->GetAmmoType());
}
else //can happen during object pickup/throw
{
grenadeType.assign(m_sGrenadeType, m_sGrenadeType.length());
grenades = m_iGrenadeAmmo;
}
}
}
}

if(m_playerAmmo == -1) //probably good to update fireMode
{
SetFireMode(NULL, NULL);
m_animPlayerStats.Invoke("setAmmoMode", 0);
}

m_animPlayerStats.GetFlashPlayer()->SetVariable("TACLauncherMode", SFlashVarValue(TACLauncherMode));


if(m_playerAmmo != ammo || m_playerClipSize != clipSize || m_playerRestAmmo != restAmmo ||
m_iGrenadeAmmo != grenades || grenadeType.compare(m_sGrenadeType) != 0)
{
SFlashVarValue args[7] = {0, ammo, clipSize, restAmmo, grenades, grenadeType.c_str(), true};
m_animPlayerStats.Invoke("setAmmo", args, 7);
m_playerAmmo = ammo;
m_playerClipSize = clipSize;
m_playerRestAmmo = restAmmo;
m_iGrenadeAmmo = grenades;
m_sGrenadeType.assign(grenadeType.c_str()); // will alloc
}
}
else
m_playerAmmo = m_playerRestAmmo = -1; //forces update next time outside vehicle
}






Wie lese ich jetzt was hierraus?
einige Dinge wie z.B.

m_animMPMessages.Invoke("addKillLog", args, 2);kann ich mir etwa denken was es ist.
Aber da hats sachen darunter, die ich schon von der struktur her nicht kenne...

Flow groover
15.10.2010, 18:55
Hi, ich hab ne Frage, ich habe die "TEX_Attack.gfx" mit nem decompilator dekopiliert,
Da ich für die Alien Server MOD ein verändertes HUD haben will, nachdem ich alles gemacht hatte, und in die SB Importiert, waren alle Schriften auf einmal nurnoch so Kästchen. (Siehe Bild)

http://www.abload.de/img/hkgzih3qhu.jpg

Nun hat mir einer gesagt, das man den Text immer nach dem dekopilieren "einbetten" muss o.ä., damit die Schriften wieder funktionieren??? Bei den Decopiled Crysis files von Crymod habe ich das selbe problem, also gehe ich davon aus, das einer wissen müsste wie das geht? Hilfe wäre sehr nett :-(
Für Living Hell oder Rainy Days wurde das auch gemacht, wie hast du das gemacht Hamers? oder ist das da anders?

Masterside
15.10.2010, 19:08
@Flow Groover
Das wird dir glaube ich helfen:
http://wiki.crymod.com/index.php/Fixing_the_Decompiled_Flash_Files

Flow groover
15.10.2010, 19:34
Also muss ich nur diese Fonts eunterladen oder was?
Und dann gehen alle Schriften in Crysis??

befubo
19.10.2010, 13:58
Hey Leute, kann mir mal jemand einen Tipp geben?

Ich möchte das HUD Element mit der Kartenlavigation (unten links) rund machen. Aber iwie krieg ich das nicht hin mit den Norden/Süden und den Graden damits stimmt...
hat mir da jemand ein Tipp oder hat das mal jemand gemacht und könnte mir die .fla ausleihen?
thx

Masterside
19.10.2010, 14:21
@Flow Groover
Wenn du die Sachen in Embed und nicht als HTML rendern eingestellt hast, müsste es eigendlich gehen, da Crysis die Schrifttypen iwo versteckt, aber damit was anfangen kann.

@befubo
Das einzige was mir einfällt, wäre sich mal die original datei angucken. Bzw. die einfach ab ändern.

Pat21
19.10.2010, 14:39
@ befubo
Das ist nen bisschen tricky, da man nich 0 - 360° übergeben bekommt, sondern 90 - 450°. Baue doch einfach mal ne Textbox ein,
in der die übergeben Daten angezeigt werden. Dann gehste ins Spiels und testest nen bisschen rum.

@ Masterside
Nein, verstecken tun die nichts. Die sind wohl alle in die Flash-Dateien eingebettet oder unter GameData.pak/Fonts.

Masterside
19.10.2010, 14:52
@Pat21
Das meinte ich mit versteckt, dass die Schriften iwo in den Dateien sind. ;)

Flow groover
19.10.2010, 15:24
Und wo kann ich da jetzt Embeded einstellen?
Und muss ich Flash die Schriften jetzt geben, und wenn, wie?
Oder muss ich das nicht machen, wenn ich das erste gemacht habe? Sry habe echt keine Ahnung davon, etwas genauer wäre nett :lol:

Masterside
19.10.2010, 17:02
Also du öffnest die fla datei und suchst dir den Dynamic Text raus. Klick den an und geh
auf die Eigenschaften. Da klickste auf "Embed..." und wählst "Upper Case" bis "Basic Latein" aus. Dann klickste noch auf "<>"
damit HTML aus ist. Das machste mit allen Dynamic Texten die in der fla sind. dann müsste es gehen.

der_kleine_bob
30.10.2011, 22:59
Hallo,

ich brauche Hilfe bei einer kleinen Flash-Angelegenheit.
Und zwar will ich eine eigene Anzeige für Health und Energy erstellen und ich bekomme das Ganze zwar ingame angezeigt, aber es passiert nichts.
Ich habe versucht dieses Tutorial zu befolgen: http://www.moddb.com/games/crysis/tutorials/crysis-hud-creating

Die Anzeigen sind zwei dynamische Textfelder namens health_txt und energy_txt
Der Actionscript (2.0) ist auf einer extra Ebene und hat folgenden code :


function setHealth(arg:Number)
{
if (arg <0) { arg=0; }
health_txt.text = arg;
health_txt.text = arg-1
}
function setEnergy(arg:Number)
{
energy_txt.text = arg;
energy_txt.text = arg-1
}


Wäre nett, wenn mir jemand einen Hinweis geben könnte, was ich falsch gemacht habe bzw.
den richtigen Code posten könnte.

Danke!

Masterside
31.10.2011, 14:25
Der Pfad ist nicht richtig.

Da fehlt eine Stelle.


function setHealth(arg:Number)
{
if (arg <0) { arg=0; }
Root.Health.health_txt.text = arg;
}


function setEnergy(arg:Number)
{
Root.Energy.energy_txt.text = arg;
}

befubo
03.08.2012, 10:17
Hey Leute
Hat jemand möglichweise einen aktuallisierten Download-Pfad für die Crysis-Flash-Dateien? DL-Link über Crymod geht logischerweise nicht mehr und iwie find ich das auf crydev net...

Danke :)

Masterside
03.08.2012, 10:44
Die DL Links von CryDev sind die von CryMod, also beide down.
Kannn dir nur die Example Files noch empfehlen. Hier (http://www.crydev.net/downloads.php?view=detail&category=122&df_id=4060)
Sofern du ein eigenständiges HUD machen willst, sind diese eher zu empfehlen,
weil die um einiges verständlicher sind.

Ansonsten könnte ich dir heute Abend die richtige HUD files noch mal hochladen.
Weiß aber nicht mehr ob die von C1 oder CW waren. Macht aber glaube ich nichts aus ;)

befubo
03.08.2012, 10:55
Hey
Ich brauche diese Originalen Files weil ich da nachschauen kann welche Argumente verwendet wurden (Welche funktionen etc...) Von dem her währe ich froh um die Files :)
Danke

Masterside
03.08.2012, 12:23
Die stehen doch auch im C++ Code, da kannste auch nachschauen, welche verwendet wurden ;).
Naja, schicke dir den DL Link dann per PN

befubo
03.08.2012, 12:32
Na ja, bei den Flashs kenn ich mich schon aus, zudem kann ich auch einige Grafiken aus den Vorlagen verwenden ;)
Also vielen Dank ^^

befubo
06.08.2012, 12:54
Heyho :)
Mal ne Frage: Kommen alle HUD Elemente (also die .gfx) in den "Libs/UI" Ordner?
Weil ich wollte mal den Radar einfügen und habe ihn unverändert als gfx in den Ordner gespeichert und die Flash hat nicht Richtig funktioniert (Also keine Anzeige, die Zahlen als @blablabla angezeigt etc...) An was kann das liegen?

Danke und lg
befubo

Flow groover
06.08.2012, 13:16
Wenn du das Crysis Radar in Crysis Wars einfügst bekommst du probleme mit der Localisation. In Crysis Wars wurden die @ Placeholder für N W S O umbenannt, d.h. entweder du tust das Radar Hud wieder raus, oder du kopierst dir die definierungen der @ Placeholder in deine Mod Localisation.

befubo
07.08.2012, 11:18
Wenn du das Crysis Radar in Crysis Wars einfügst bekommst du probleme mit der Localisation. In Crysis Wars wurden die @ Placeholder für N W S O umbenannt, d.h. entweder du tust das Radar Hud wieder raus, oder du kopierst dir die definierungen der @ Placeholder in deine Mod Localisation.

Ok, ich habe gemerkt das sämtliche Modifizierten HUDs ingame nicht gehen. Im Editor werden alle korrekt angezeigt (Crysis Wars Editor), Aber wenn ich das ganze ingame (Crysis Wars) anschaue, werden mir die originalen HUDs angezeigt...
Wie genau kann ich denn das lösen? Weil hier liegts doch sicher nicht an den @Placeholdern... oder?
Danke

befubo
15.08.2012, 14:37
Hey Leute
Noch ne Frage:
Ist es möglich, andere HUD Befehle in veschiedene Dateien einzubinden?
Also zum Besipiel hab ich ja das "HUD_AmooHealthEnergySuit.gfx", darin wird ja die Healthbar, Munition etc. gesteuert.
Kann ich jetzt auch in der gleichen Datei die Funktion für die Nightvision oder was auch immer inplementieren?
Ich hoffe es ist verständlich was ich meine xD

Diese Frage ist auch noch offen, falls jemand ne Idee hat :D

Ok, ich habe gemerkt das sämtliche Modifizierten HUDs ingame nicht gehen. Im Editor werden alle korrekt angezeigt (Crysis Wars Editor), Aber wenn ich das ganze ingame (Crysis Wars) anschaue, werden mir die originalen HUDs angezeigt...
Wie genau kann ich denn das lösen? Weil hier liegts doch sicher nicht an den @Placeholdern... oder?
Danke

Vert-X
15.08.2012, 14:45
Ok, ich habe gemerkt das sämtliche Modifizierten HUDs ingame nicht gehen. Im Editor werden alle korrekt angezeigt (Crysis Wars Editor), Aber wenn ich das ganze ingame (Crysis Wars) anschaue, werden mir die originalen HUDs angezeigt...
Wie genau kann ich denn das lösen? Weil hier liegts doch sicher nicht an den @Placeholdern... oder?
Danke
Hast du die gfx-Files in ein zip-komprimiertes pak-Archiv gesteckt?

befubo
15.08.2012, 14:47
Nee, habs einfach im Hauptordner in Libs/UI reingepackt...
Muss ich ne pak machen? Weil im Editor gehts ja...

Vert-X
15.08.2012, 20:56
Nee, habs einfach im Hauptordner in Libs/UI reingepackt...
Muss ich ne pak machen? Weil im Editor gehts ja...
Ja musst du.

befubo
28.08.2012, 11:36
Ja musst du.
Ok, danke ;)

Noch ne Frage ^^
Ich suche die Funktion, mit welcher die Waffenauswahl angesteuert wird.
Was ich gefunden habe ist folgendes:



Line._visible = false;
Over._visible = false;
Text._visible = false;
var Line_color = new Color(Line.Colorset);
var Over_color = new Color(Over.Colorset);
var Text_color = new Color(Text.Colorset);
setLineColor = function (_strLine)
{
Line_color.setRGB(_strLine);
};
setOverColor = function (_strOver)
{
Over_color.setRGB(_strOver);
};
setTextColor = function (_strText)
{
Text_color.setRGB(_strText);
};
setLineColor(6321744);
setOverColor(14187058);
setTextColor(11922574);
var m_logs = new Array();
var m_time = 3;
var m_maxLines = 5;
addLog = function (strIcon, bFrame)
{
while (m_logs.length >= m_maxLines)
{
var _loc1 = m_logs.shift();
clearInterval(_loc1.TimerID);
} // end while
var _loc2 = new Object();
_loc2.KillIcon = strIcon;
_loc2.Frame = bFrame;
m_logs.unshift(_loc2);
_loc2.TimerID = setInterval(popTimer, m_time * 1000, _loc2);
updateLogs();
};
clearLogs = function ()
{
var _loc2;
while (_loc2 = m_logs.pop())
{
clearInterval(_loc2.TimerID);
} // end while
for (var _loc1 = 0; _loc1 < m_maxLines; ++_loc1)
{
Root["Log" + _loc1]._visible = false;
} // end of for
};
updateLogs = function ()
{
var _loc3 = 0;
var _loc1 = 0;
for (var _loc3 = m_logs.length - 1; _loc3 >= 0; --_loc3)
{
var _loc2 = m_logs[_loc3];
var _loc4 = Root["Log" + _loc1];
if (!_loc4)
{
continue;
} // end if
_loc4._visible = true;
if (_loc4._currentframe > 1)
{
_loc4.gotoAndStop("active");
} // end if
_loc4.Cont.KillIcon.Colorset.gotoAndStop(_loc2.Kil lIcon);
_loc4.Content.Frame._visible = _loc2.Frame == true;
_loc2.AssignedLog = _loc4;
++_loc1;
} // end of for
while (_loc1 < m_maxLines)
{
_loc4 = Root["Log" + _loc1];
if (!_loc4)
{
}
else
{
_loc4._visible = false;
} // end else if
++_loc1;
} // end while
};
popTimer = function (obj)
{
for (var _loc1 = 0; _loc1 < m_logs.length; ++_loc1)
{
if (m_logs[_loc1].TimerID == obj.TimerID)
{
m_logs.splice(_loc1, 1);
} // end if
} // end of for
clearInterval(obj.TimerID);
obj.AssignedLog.gotoAndPlay("fade");
};
resetColor = function ()
{
Root.gotoAndPlay("restart");
};
var Destroy = 0;
destroy = function (_strStatus)
{
if (_strStatus == 0)
{
_root.Destroy = 0;
_root.Root.gotoAndStop(1);
} // end if
if (_strStatus == 1)
{
_root.Destroy = 1;
_root.Root.gotoAndStop("malfunction");
} // end if
if (_strStatus == 2)
{
_root.Destroy = 2;
_root.Root.gotoAndStop("flickering");
} // end if
};nte




Ich werde aber nicht besonders schlau daraus. Bei den Munitionsfunktionen und den Health / Powerbars waren die Funktionen ziemlich verständlich.

function setAmmo(iSomething:Number, iAmmo:Number, iClipSize:Number,
iRestAmmo:Number, iGrenadeAmmo:Number, sGrenadeType:String, bPlayer:Boolean)
{
var ammo = iAmmo;
var restammo = iRestAmmo;
_root.Root.ammo_activ.text = ammo;
_root.Root.ammo_left.text = restammo;
_root.GrenadeMode.ammo_grenade.text = iGrenadeAmmo;
}

setFireMode = function (_iFireMode)
{
_root.AmmoMode.gotoAndStop(_iFireMode);
};
Da ist es sehr klar was angesteuert wird, aber bei der Waffenauswahl (HUD_WeaponSelection.fla) blick ich nicht durch. Kann da einer helfen?

Danke und lg
befubo