[Tutorial] Interligando variбveis Game mode x Filterscript
#1

Interligando variбveis Game mode x Filterscript

Percebi algumas dъvidas em alguns tуpicos aqui no fуrum e erros relacionados a interligaзгo de variбveis no game mode e filterscript. A maioria sabe, mas alguns iniciantes acabam se perdendo nessa hora. Enfim

Problema
O problema ocorre por exemplo em casos: Quando definimos
pawn Код:
new abcAmigo;
no game mode e tentamos usar
pawn Код:
absAmigo = 100;
acaba dando erro

Porque isto ocorre?
Ocorre pois quando damos new (assim como static) em um script, seja game mode ou seja filterscript. A variбvel sу serб definida naquele script e nгo em outro script, por mais que ambos sejam carregados no servidor.

Interligando
Para interligar, existem vбrias formas: De as mais dinвmicas atй as mais lentas. Ah quem diga que usando arquivos й melhor, ah quem diga que usando arquivos й melhor.

Para interligar, podemos usar variбveis pъblicas. Com o caso do abcAmigo. Ficaria algo mais ou menos assim:

Game mode:
pawn Код:
forward link_abcAmigo(); public link_abcAmigo() return abcAmigo;
// Note: abcAmigo amigo estб no retorno, assim quando chamada link_abcAmigo irб retornar o valor de abcAmigo
Apуs isto, apenas colocar o seguinte no filterscript:
pawn Код:
#define returnabcAmigo CallRemoteFunction("link_abcAmigo", "")
Assim, quando chamar "returnabcAmigo" no filterscript. O valor de abcAmigo no gamemode, passarб para variбvel PЪBLICA link_abcAmigo que poderiormente passa para o funзгo CallRemoteFunction que retorna o valor dos mesmo para a define returnabcAmigo .. Assim interligando o valor das variбveis.

Para colocar valor nas variбveis й o mesmo processo:

Game mode:
pawn Код:
forward link_abcAmigo(valor); public link_abcAmigo(valor) return abcAmigo = valor;
// Note: abcAmigo amigo estб no retorno, assim quando chamada link_abcAmigo irб retornar o valor de abcAmigo
Apуs isto, apenas colocar o seguinte no filterscript:
pawn Код:
#define setabcAmigo(%1) CallRemoteFunction("link_abcAmigo", "i", %1)
Assim quando digitamos: setabcAmigo(131) o valor 131 passa para a CallRemoteFunction. Que passarб link_abcAmigo(131) para o gamemode, que posteriormente o game mode faz abcAmigo = 131. Alterando o valor da variбvel, atravйs da pъblica.

Incrнvel nгo? Й bastante simples, basta entender as funзхes.

Nгo posso explicar detalhadamente qual funзгo disto, estou ensinando como interligar e nгo porque interligar, mas aqui tem um bom exemplo de quem precisou:
https://sampforum.blast.hk/showthread.php?tid=351128

** Notem meu post, lб eu uso um sistema para interligar as variбveis ..

Enfim, tambйm pode-se interligar usando arquivos, mas o processo й menos otimizado por usar OUTRAS e mais funзхes.

Espero que tenham gostado Atй mais gente
Reply
#2

Bom tutorial, parabйns. Irei usar para meus FS's
Reply
#3

Tambйm funciona com arrays estruturadas:
-
pawn Код:
enum pinfo
{
plevel,
Float:phealth
}
new PlayerInfo[MAX_PLAYERS][pinfo];
   
-   forward get_playerinfo(playerid, item);
public get_playerinfo(playerid, item)
{
if(numargs() > 2)
{
PlayerInfo[playerid][pinfo:item] = getarg(2);
return 0;
}
return _:PlayerInfo[playerid][pinfo:item];
}
- Ja tinha pensado nisso, mas nunca veio a necessidade...
Reply
#4

SetPVarInt
Reply
#5

Quote:
Originally Posted by Stewie`
Посмотреть сообщение
Tambйm funciona com arrays estruturadas:

*exemplo*
4char
Reply
#6

Quote:
Originally Posted by Ricop522
Посмотреть сообщение
SetPVarInt
Bem mais simples euoeueoue
Reply
#7

Nunca precisei usar vars de um FS para o GM. Boa dica!
Reply
#8

SetPVarInt й exclusivo para jogadores, apesar de haver a possibilidade de fazer isto uma GVar. Nгo й aconselhбvel. Para isto, use getproperty e setproperty
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)