Öncelikle visual studiomuzu açalım. Aşağıdaki resimde de gördüğünüz gibi yeni bir sınıf ekliyoruz. Özelliği yeni sınıfta yazacağım ben. İstiyorsanız kodları "Main"e de ekleyebilirsiniz. Bir sıkıntısı olmaz. Ben özellikleri ayrı ayrı sınıflandırmanın daha iyi olacağını düşünüyorum.
(!!!Eğer kodları "Main"e ekleyecekseniz iki üç resim aşağıdaki "Submodule.dll"e eklentiyi yapmamalısınız!!!)
Gelen pencereden "sınıf" seçiyoruz
Gelen sınıfı dilediğimiz gibi adlandırabiliriz. Ben "Kontroletme" olarak adlandırdım gördüğünüz gibi.
evet şimdi "Kontroletme" sayfasındaki her şeyi silip alttaki kodları yapıştıralım. Kodun içindeki örnek veriyorum "controlRandomAgent" gibi yeşil ifadeleri dilediğiniz gibi adlandırabilirsiniz. Kod içinde triggerlanacak şeyleri belirtmiş oluyoruz. Kodu inceleyin dediğimi anlayacaksınız. Kod multiplayer kısmındaki "CaptainBattle"dan örnek alınarak geçirilmiş olduğu için ellemedim ben...
using System;
using System.Collections.Generic;
using System.Linq;
using TaleWorlds.CampaignSystem;
using TaleWorlds.Core;
using TaleWorlds.Library;
using TaleWorlds.MountAndBlade;
using TaleWorlds.MountAndBlade.ViewModelCollection;
namespace Modumuz
{
public class Kontroletme : MBSubModuleBase
{
// Ana kodlar kontrol ettiğimiz karakterin canlı olup olmadığını sorgalayan kısım vs.
protected override void OnApplicationTick(float dt)
{
bool flag = Game.Current != null && Game.Current.CurrentState <= Game.State.Running && Mission.Current != null && Mission.Current.Scene != null;
if (flag)
{
bool flag2 = Agent.Main != null;
if (flag2)
{
this.player = Agent.Main;
this.timeOfDeath = Mission.Current.Time;
}
else
{
bool flag3 = this.player != null && this.player.Health <= 0f && Mission.Current.Time - this.timeOfDeath >= 2f;
if (flag3)
{
List<Agent> list = Mission.Current.GetNearbyAllyAgents(new Vec2(0f, 0f), 1E+07f, this.player.Team).ToList<Agent>();
bool flag4 = list.Count > 0;
if (flag4)
{
bool flag5 = Campaign.Current != null && Campaign.Current.MainParty != null && Campaign.Current.MainParty.MemberRoster != null;
if (flag5)
{
this.controlAgentFromParty(list);
}
else
{
this.controlRandomAgent(list);
}
}
else
{
this.player = null;
}
}
}
}
}
// Random bir agent atamamızı sağlar
private void controlRandomAgent(List<Agent> agents)
{
this.controlAgent(agents.GetRandomElement<Agent>());
}
// Kontrol edilen karakter öldükten sonra trgigerlanacak şeyler
private void controlAgent(Agent agent)
{
try
{
agent.SetMaximumSpeedLimit(-1f, false);
}
catch (Exception ex)
{
}
agent.Controller = this.player.Controller;
try
{
ScoreboardVM scoreboardVM = (ScoreboardVM)Mission.Current.GetMissionBehaviour<BattleObserverMissionLogic>().BattleObserver;
scoreboardVM.IsMainCharacterDead = false;
}
catch (Exception ex2)
{
}
bool flag = agent.Name != null;
if (flag)
{
InformationManager.DisplayMessage(new InformationMessage("Şuan kontrol etmektesiniz: " + agent.Name));
}
}
private void controlAgentFromParty(List<Agent> agents)
{
List<string> list = new List<string>();
foreach (Agent agent in agents)
{
list.Add(agent.Name);
}
List<CharacterObject> list2 = Campaign.Current.MainParty.MemberRoster.Troops.ToList<CharacterObject>();
foreach (CharacterObject characterObject in list2)
{
int num = list.IndexOf(characterObject.Name.ToString());
bool flag = num != -1;
if (flag)
{
this.controlAgent(agents.ElementAt(num));
return;
}
}
this.controlRandomAgent(agents);
}
private Agent player = null;
private float timeOfDeath = -1f;
}
}
Kaydedelim yaptığımız değişiklikleri
Bu aşamayı isterseniz atlayabilirsiniz. Ben güvenlik olsun diye ekledim. Çok da mühim değil. Başvuru olarak önceki derslerde MB klasöründen eklenmesi gerekenleri göstermiştim. Üstüne resimdeki 5 dosyayı da eklemeniz iyi olabilir. Bir sıkıntı çıkarırsa silebilirsiniz. Dediğim gibi mühim değil.
Visualda son olarak şu şekilde gözükmeli kodlar
Son kez kaydedip yukarıdan "derle"ye tıklıyoruz. Kodlar modumuza eklenmiş oluyor. İşimiz bitti sayılır. Son olarak Modulesde modumuzun klasöründeki "SubModule" dosyasını açıp resimdeki gibi kodları ekliyoruz.
<SubModule>
<Name value="Modumuz"/>
<DLLName value="Modumuz.dll"/>
<SubModuleClassType value="Modumuz.Kontroletme"/>
<Tags>
<Tag key="DedicatedServerType" value="none" />
<Tag key="IsNoRenderModeElement" value="false" />
</Tags>
</SubModule>
Ve artık ölünce savaşımız bitmiyor....