Jump to content
View in the app

A better way to browse. Learn more.

Forum Supreme-Elite

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Salut à tous et surtout aux codeurs de la team,

 

J'en ai parlé à quelques uns, et j'officialise la chose.

 

Je lance un projet, qui me permettra, dans mes maps, de rétrécir/agrandir les joueurs, idée plutot révolutionnaire, surtout pour les conduits.

 

Description :

Le fonctionnement est très simple, les maps et le pluggin seront reliés.

Voici un exemple :

http://i.imgur.com/5JOEr3k.png

Lorsque un joueur entre dans la zone rouge (le conduit, et un peu avant), il est rétréci.

Lorsque un joueur entre dans la zone jaune il est mis reprend sa taille initial.

 

Ensuite on pourra l'utiliser de facon différente, mais toujours avec des zones.

 

Dans la map:

Dans les maps où je voudrais utiliser le pluggin, je dois créer une nouvelle entité, d'un tout nouveau type inexistant par exemple "trigger_resize", puis je lui rajoute un nom "25" "50" "75" "100" "125" ...

Le taff sur la map s'arrête là, ces triggers seront inutiles, et ne font rien sans le pluggin

 

Le pluggin:

Là on rentre dans l'aspect technique.

Lorsque une personne rentre dans un trigger_resize, le pluggin lit le trigger et regarde son nom.

Selon le nombre indiqué, il resize le joueur à la taille indiquée.

 

Les 2 trucs à chercher :

 - Detecter le trigger et son nom

Je ne sais pas de quel manière le pluggin va interagir avec la map, mais je sais que c'est possible, je demanderai des infos a Wylloh qui l'a déjà fait.

 - Resize le joueur

Alors ça c'est faisable grâce a ce pluggin :

https://forums.alliedmods.net/showthread.php?p=1774605

 

J'pensais inclure un truc de ce type dans le code :

 

 

switch (nom_entite)
{
case 100:
                         //Rend le joueur a taille 100%
  break;
case 75:
                        //Rend le joueur de taille 75% (plus petit en gros)                    
  break;
case 50:
                        //Rend le joueur de taille 50%   
  break;
case 25:
                        //Rend le joueur de taille 25%
  break;
case 10:

  break;
case 125:

  break;
case 150:

  break;
case 200:

  break;
default:
                          //NE RIEN FAIRE
  break;
}

 

Je ne pense pas que ce soit un pluggin très dur a faire, dans la mesure où on comprend les 2 trucs à chercher.

 

Je fais ce post pour avoir un vrai avancement, et pas devoir faire un MP comme je fais d'hab (tmtc la marche impérial), ou aller voir les gens 1 par 1.

Tu peux pas faire un switch en testant une string noob ! :P

 

Mais sinon il suffit de convertir en int ou bien utiliser des if, dans tous les cas c'est simple.

 

Le plus compliqué dans le plugin est la partie qui va vérifier si le joueur est dans la zone du trigger car je n'ai aucune idée de comment faire, il faut que je cherche des plugins similaires (Je peux peut-être m'inspirer de la dv race). 

  • Author

Effectivement :P

Mais avec des if ce serait plus lourd

Edited by Raphi

  • Author
J'aimerai m'en servir dans ma map mc, faudrait voir asap :P
  • Author

http://www78.zippyshare.com/v/17584815/file.html

Pour les 1ere test :

Il ya 3 triggers

 - Trigger_multiple 

nom : trigger01

OnStartTouch trigger01 FireUser1

 

 - Trigger_multiple

nom : trigger02

OnStartTouch trigger02 FireUser1

OnStartTouch !activator AddOuput targetname : CitronFiltre2   (oui je l'ai emprunté sur ma map xD)

 

 -Trigger_pluggin (un nouveau que j'ai créé

nom : trigger03

OnStartTouch trigger03 FireUser1

OnStartTouch !activator AddOuput targetname : CitronFiltre2   

 

 

 

Maintenant reste a test avec le code ^^

si vous n'y arrivez pas ou besoin de fonction etc, dites le moi, j'ai ce qu'il faut.

 

@Raphi : un switch est beaucoup plus compréhensible et facile d'utilisation mais il est beaucoup plus lourd que de tout faire en if (les if prennent moins de place mémoire à la compilation).

Edited by Dertione

  • Author
J'sais pas trop. Avec le trigger, une fois le pluggin fait on sera tkl alors que sans y'aura tj du taff a faire

C'est tout le dilemme. Soit te fais chier a faire toutes les maps pour qu'il y ai ton trigger sans compatibilité avec des maps que tu n'auras pas touché mais côté code, rien à faire à part le truc de base. Soit tu te fais pas chier avec le trigger_map et tu bosses 30 secondes sur chaque maps pour définir les endroits où tu rétréci et les autres où tu redeviens normal. Après je sais que de ton point de vue, ce ne sera plus le concept des maps à raphi mais seulement le concept pensé par raphi applicable partout. Comme tu le sens.

  • Author

Non mais de toute facon, je devrais toucher les maps, puisque je veux le retrecissement dans des petis conduits, qui n'existe pas encore ;)

  • Author


#include<sdktools>

 

public OnPluginStart()

{

        HookEventEx("teamplay_round_start", round_start, EventHookMode_PostNoCopy);

        HookEventEx("player_spawn", player);

}

 

new bool:lowgrav[MAXPLAYERS+1];

 

public player(Handle:event, const String:name[], bool:dontBroadcast)

{

        new client = GetClientOfUserId(GetEventInt(event, "userid"));

        if(lowgrav[client])

        {

                SetEntityGravity(client, 1.0);

        }

}

 

public round_start(Handle:event, const String:name[], bool:dontBroadcast)

{

        new String:buffer[60], ent = -1;

        while((ent = FindEntityByClassname(ent, "trigger_multiple")) != -1) // Find trigger_multiple

        {

                GetEntPropString(ent, Prop_Data, "m_iName", buffer, sizeof(buffer)); // Get targetname

                if(StrEqual(buffer, "trigger01", true)) // targetname match

                {

                        HookSingleEntityOutput(ent, "OnEndTouch", callback, true); // Hook trigger output

                        HookSingleEntityOutput(ent, "OnStartTouch", callback, true);

                        break; // Stop loop

                }      

        }

}

 

public callback(const String:output[], caller, activator, Float:delay)

{

        if(activator > 0 && activator <= MaxClients)

        {

                if(StrEqual(output, "OnStartTouch"))

                {

                        //ServerCommand("sm_gravity #%i 0.2", GetClientUserId(activator));

                        lowgrav[activator] = true;      // Mark player

                        SetEntityGravity(activator, 0.2);

                        PrintHintText(activator, "Low gravity");

                }

                else if(StrEqual(output, "OnEndTouch"))

                {

                        //ServerCommand("sm_gravity #%i 1.0", GetClientUserId(activator));

                        lowgrav[activator] = false;     // Remove mark

                        SetEntityGravity(activator, 1.0);

                        PrintHintText(activator, "Normal gravity");

                }

        }

}


Oulalah, c'est du code raffistoler tout ça, ca part vite en embrouille. C'est beaucoup trop complexe pour le peu que tu veux faire. Deja, je vous conseille d'utiliser smlib, cela vous facilitera la vie.

Et s'il vous plaît, les variables globales définissez les juste après les include pas en plein milieu du code...

 

Le mieux niveau algorithme/optimisation, c'est de detecter quand la personne appuie sur la touche "e" par exemple et si elle est dans la zone trigger, on fait le taff, sinon faut lancer une boucle qui va scruter tout ça h24 (ultra lourd).

Voici une fonction qui permet la detection de touche (tirer du mode call of duty) :

  1. public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
  2. {
  3. if(IsPlayerAlive(client))
  4. {
  5. if(buttons == IN_USE && g_bHEStuning[client]==false)
  6. {
  7. PrintToChat(client, "Vous pouvez de nouveau bouger");
  8. g_bHEStuning[client]=true;
  9. CreateTimer(0.5, TimerStopStun, client);
  10. }
  11. }
  12. }

 

https://forums.alliedmods.net/showthread.php?t=148387

Edited by Dertione

  • Author

Non mais je ne veux pas de e, je veux uniquement si il entre/sort, commençons pas a bidouiller des trucs

Dans ce cas on peux utiliser sdkhooks de ce que j'ai lu, j'mi met quand j'ai le temps

 

EDIT : a Merci raphi. Tiens je savais pas que tu pouvais hook des événements avec sdktools. Il se passe quoi concrètement avec ça ?

  • Author
Alors moi je sais pas trop, c'est poney qui code et jdemande 2 3 coup de main a un pote a wylloh mais j'peux pas t'informer ^^
  • Author

Faudrait que ce soit fait ce week end si je veux pas prendre trop de retard :/

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...

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.