Jump to content

Fivem c# Jak na exporty


Xogos

Recommended Posts

  Zdravím, připravil jsem si pro Vás malý návod.

Obtížnost tutoriálu: 2/5 

List funkcí které použijeme dnes:

  • new Func<T1,Return Value(datový typ)>(nazevFunkce)
  • new Action<T1,...>()
  • Exports.Add("Nazev exportu", delegate)
  • Exports["Nazev resource"]

 

Co je to export?

Export je Dictionary mapa která ukládá delegate funkce a lze tyto funkce dědit do ostatních resourců..
jestli je ještě někdo z maten co je to Dictionary a delegate, tak to rychle vysvětlím. Není to nic těžkého.

Dictionary
Je mapa klíčů a hodnot do které můžete ukládat skoro cokoliv.

Delegate
Je odkaz který odkazuje na funkci s parametrama.
To samé platí pro "new Action<...>() , new Func...>"
Zapouzdruje metodu, je tady jeden rozdíl akorát. New action nevrací hodnotu a new Func vrací hodnotu.

 

Dám několik příkladů jakýma způsobama lze vytvářet exporty, na Vás je pak si vybrat který se vám bude nejvíce "líbit"
nebo lépe používat... Pojďme se na to vrhnout teda.

 

//Deklarujeme delegate která má jenom parametr string
public delegate void MessageFunction(string msg);


//Tvoříme funkci která nám zobrazovat Subtitles do hry
public void showSubtitles(string message)
{
     //Tato funkce nám zobrazí titulky ve hře..  
     Screen.ShowSubtitle(message);
}

//Funkce která bude sloužit k vyvolání eventu "chatMessage" která posílá zprávu do chatu..
public void ZpravaDoChatu(string message)
{
     TriggerEvent("chatMessage", "<Zprava>", new[] { 255, 0, 0 }, message);
}

public MainClass()
{
     //abstraktuje funkci "showSubtitles" 
     MessageFunction subtitle = showSubtitles;
  
     //přidáváme export se jménem "showSubtitles" 
     Exports.Add("showSubtitles", subtitle);

     //Annonymní funkce
     Exports.Add("sendMessage", new Action<string>((message) => {
          TriggerEvent("chatMessage", "<Zprava>", new[] { 255, 0, 0 }, message);
     }));
  
     //abstraktuje funkci "ZpravaDoChatu"
     Exports.Add("anotherMessage", new Action<string>(ZpravaDoChatu));
}

Jak pak něco takového vyvolám vůbec ?

[Command("testprikaz")]
void myCommand()
{    
     //Exports vrací DynamicMethod, "xCoreMaster" je název mého resourcu. Může se lišit od vašeho..
     dynamic xCoreMaster = Exports["xCoreMaster"];      
  
     xCoreMaster.showSubtitles("test subtitles");
     xCoreMaster.sendMessage("Zprava v chatu lel");
     xCoreMaster.anotherMessage("dalsi zprava");
}

 

Výsledek:

SEVsSrJ7T4awa48F47rZjg.png

 

Jak vracet hodnoty z export funkcí ?

//Deklarujeme delegate která bude vracet datový typ "string"
public delegate string namePlayer();

//vytvoříme funkci getPlayerName
public string getPlayerName()
{
     // Pokaždé když se zavolá tato funkce, tak se vratí string v podobě "(Jmeno hráče) z exportu lel"
     return Game.Player.Name + " z exportu lel";
}

//Jenom příklad, funkce banka reprezentuje jenom funkci pro vracení datového typu.
public int banka()
{
     //Pokaždé když zavoláme funkci tak nám bude vracet 559.  
     return 559;
}

public MainClass()
{
     //abstraktuje funkci "getPlayerName" 
     namePlayer name = getPlayerName;

     Exports.Add("getPlayerName", name);
     Exports.Add("moneyBank", new Func<int>(banka));
  
     //Jak už se psalo nahoře, new Func<...> dokáže vracet hodnoty.. Mám takovou domněnku že fivem nerado čte třídy.. 
     //tzn není dobré vracet Player třídu, nebo vlastní třídy.
     //Annonymní funkce která když se zavolá vratí true/false podle toho jeslti hráč je naživu.
     Exports.Add("isAlive", new Func<bool>(() =>
     {
          if(Game.PlayerPed.Health < 0) return false;
          return true;
     }));
}

 

[Command("testprikaz")]
void myCommand()
{    
     //Exports vrací DynamicMethod, "xCoreMaster" je název mého resourcu. Může se lišit od vašeho..
     dynamic xCoreMaster = Exports["xCoreMaster"];     
  
     xCoreMaster.sendMessage("Jmeno: "   + xCoreMaster.getPlayerName());
     xCoreMaster.sendMessage("Banka: "   + xCoreMaster.moneyBank());
     xCoreMaster.sendMessage("Jsem naživu: " + xCoreMaster.isAlive());
}


Výsledek:

SA214lh7TNm9rQsrPcoLsg.png

 

Děkuji za prečtení 🙂

  • Like 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...