[Skript] Idee per skript

Salve a tutti minecraftiani.
Oggi sono qui per chiedere a voi di aiutarmi a migliorare, infatti ho da poco caricato il mio primo skript
Siccome ho poca fantasia, chiedo a voi di darmi qualche input per creare qualche skript,
gli skript li metterò sotto forma di codice qui su mcitalia e se è abbastanza buono penso che lo caricherò persino su SpigotMc


Ps. ovviamente gli skript saranno free e non voglio nulla in cambio. (Modificato 25/05/2017, 22:59 da Mastory_Md5.)
SynesthesiaMC in arrivo!


Se ti sono stato utile clicca su +1  Riot
1 utente apprezza questo post
Dipende, se pensi di usare skript per fare modalità allora ti conviene cambiare idea e passare allo sviluppo di plugins veri e propri.
Io con skript avevo fatto:
-Hack Control
-StaffMode
-Hero (abilità con potenziamenti...)

@Mastory_Md5
Se ti sono stato d'aiuto lascia un Rep
26/05/2017, 06:29LampoGold ha scritto: Dipende, se pensi di usare skript per fare modalità allora ti conviene cambiare idea e passare allo sviluppo di plugins veri e propri.
Io con skript avevo fatto:
-Hack Control
-StaffMode
-Hero (abilità con potenziamenti...)

@Mastory_Md5

Torno dal lavoro piuttosto tardi e la voglia di studiare java sinceramente mi è passata, uso skript perchè anche se limitato permette di fare alcune cose molto carine.
SynesthesiaMC in arrivo!


Se ti sono stato utile clicca su +1  Riot
Il problema più grande di skript è le numerosi dipendenze che vengono utilizzate per ricreare il prodotto finale (skQuery, Umbaska etc.), altrimenti sarebbe un ottima alternativa a java (per coloro che non hanno la possibilità di studiarselo)

Inoltre, se non si ha familiarità con il plugin, lo script che si và a realizzare porterebbe non poco lag al server.

Se la tua intenzione è realizzare uno skript basilare come HackControl
Codice:
command /setlocation <text>:
  trigger:
    player has permission "permesso.staff"
    if arg-1 is "hacker":
      set {hackloc} to player's location
    else if arg-1 is "staffer":
      set {staffer} to player's location
    else if arg-1 is "end":
      set {endloc} to player's location

command /control <player>:
  trigger:
    player has permission "permesso.staff"
    set {control.%arg-1%} to arg-1
    teleport arg-1 to {hackloc}
    teleport player to {staffer}
    send "&4Sei sotto controllo da parte di %player%" to arg-1


command /finish <player>:
  trigger:
    player has permission "permesso.staff"
    delete {control.%arg-1%}
    teleport arg-1 to {endloc}
  
    
on command:
  if {control.%player%} is set:
    cancel the event

on quit:
  if {control.%player%} is set:
    loop all players:
      loop-player has permission "permesso.staff"
      send "%player% è uscito da un controllo hack" to loop-player
Ti consiglio di ampliare i tuoi orizzonti.

P.S. Realizzato in 4 e 32 secondi
[Immagine: bZvpSjW.png]  

26/05/2017, 09:20Niketion ha scritto: Il problema più grande di skript è le numerosi dipendenze che vengono utilizzate per ricreare il prodotto finale (skQuery, Umbaska etc.), altrimenti sarebbe un ottima alternativa a java (per coloro che non hanno la possibilità di studiarselo)

Inoltre, se non si ha familiarità con il plugin, lo script che si và a realizzare porterebbe non poco lag al server.

Se la tua intenzione è realizzare uno skript basilare come HackControl
Codice:
command /setlocation <text>:
  trigger:
    player has permission "permesso.staff"
    if arg-1 is "hacker":
      set {hackloc} to player's location
    else if arg-1 is "staffer":
      set {staffer} to player's location
    else if arg-1 is "end":
      set {endloc} to player's location

command /control <player>:
  trigger:
    player has permission "permesso.staff"
    set {control.%arg-1%} to arg-1
    teleport arg-1 to {hackloc}
    teleport player to {staffer}
    send "&4Sei sotto controllo da parte di %player%" to arg-1


command /finish <player>:
  trigger:
    player has permission "permesso.staff"
    delete {control.%arg-1%}
    teleport arg-1 to {endloc}
  
    
on command:
  if {control.%player%} is set:
    cancel the event

on quit:
  if {control.%player%} is set:
    loop all players:
      loop-player has permission "permesso.staff"
      send "%player% è uscito da un controllo hack" to loop-player
Ti consiglio di ampliare i tuoi orizzonti.

P.S. Realizzato in 4 e 32 secondi

No sinceramente vorrei fare qualche cosa di più complesso.
Comunque sto iniziando a studiare java ci metterò molto lo so però almeno è un inizio.
SynesthesiaMC in arrivo!


Se ti sono stato utile clicca su +1  Riot
In skript:
Codice:
command /setlocation <text>:
  trigger:
    player has permission "permesso.staff"
    if arg-1 is "hacker":
      set {hackloc} to player's location
    else if arg-1 is "staffer":
      set {staffer} to player's location
    else if arg-1 is "end":
      set {endloc} to player's location

command /control <player>:
  trigger:
    player has permission "permesso.staff"
    set {control.%arg-1%} to arg-1
    teleport arg-1 to {hackloc}
    teleport player to {staffer}
    send "&4Sei sotto controllo da parte di %player%" to arg-1


command /finish <player>:
  trigger:
    player has permission "permesso.staff"
    delete {control.%arg-1%}
    teleport arg-1 to {endloc}
  
    
on command:
  if {control.%player%} is set:
    cancel the event

on quit:
  if {control.%player%} is set:
    loop all players:
      loop-player has permission "permesso.staff"
      send "%player% è uscito da un controllo hack" to loop-player


In java:
Codice:
package it.nik.hackcontrol;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.ArrayList;

public class Main extends JavaPlugin implements CommandExecutor, Listener {

    private ArrayList<String> playerInControl = new ArrayList<>();

    @Override
    public void onEnable() {
        getCommand("setlocation").setExecutor(this);
        getCommand("control").setExecutor(this);
        getCommand("finish").setExecutor(this);

        getServer().getPluginManager().registerEvents(this, this);

        saveDefaultConfig();
    }

    @Override
    public boolean onCommand(CommandSender commandSender, Command command, String label, String[] strings) {
        if (!commandSender.hasPermission("permesso.staff"))
            return false;

        if (command.getName().equalsIgnoreCase("setlocation")) {
            Player player = (Player) commandSender;
            if (strings.length > 0) {
                String zone = strings[0].toUpperCase();
                Location location = player.getLocation();

                if (strings[0].equalsIgnoreCase("hacker")) {
                    setLocation(location, zone);
                } else if (strings[0].equalsIgnoreCase("staffer")) {
                    setLocation(location, zone);
                } else if (strings[0].equalsIgnoreCase("end")) {
                    setLocation(location, zone);
                } else {
                    return false;
                }

                player.sendMessage(ChatColor.GREEN + "Zona " + strings[0].toUpperCase() + " impostata.");
                return true;
            } else {
                return false;
            }
        } else if (command.getName().equalsIgnoreCase("control")) {
            Player player = (Player) commandSender;
            if (strings.length > 0)
                return false;

            try {
                if (getServer().getPlayer(strings[0]) != null) {
                    Player target = getServer().getPlayerExact(strings[0]);

                    playerInControl.add(strings[0]);
                    target.sendMessage(ChatColor.RED + "Sei sotto controllo da parte di " + player.getName());

                    target.teleport(zoneControl("hacker"));
                    player.teleport(zoneControl("staffer"));
                    return true;
                }
            } catch (NullPointerException exception) {
                Bukkit.getOnlinePlayers().stream().filter(players -> players.hasPermission("permesso.staff")).forEach(players -> players.sendMessage("Qualche zona (hacker/staffer/end) non è stata impostata correttamente."));
            }
        } else if (command.getName().equalsIgnoreCase("finish")) {
            if (!(strings.length > 0))
                return false;

            if (playerInControl.contains(strings[0])) {
                playerInControl.remove(strings[0]);

                Player target = getServer().getPlayerExact(strings[0]);

                target.teleport(zoneControl("end"));
                target.sendMessage(ChatColor.YELLOW + "Controllo terminato.");
            }
        }
        return false;
    }

    @EventHandler
    public void onPlayerQuit(PlayerQuitEvent event) {
        if (playerInControl.contains(event.getPlayer().getName()))
            for (Player players : getServer().getOnlinePlayers())
                players.sendMessage(ChatColor.RED + event.getPlayer().getName() + " è uscito da un controllo hack");
    }

    @EventHandler(priority = EventPriority.HIGHEST)
    public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
        if (playerInControl.contains(event.getPlayer().getName()))
            event.setCancelled(true);
    }

    private void setLocation(Location location, String zone) {
        getConfig().set(zone + ".world", location.getWorld().getName());
        getConfig().set(zone + ".x", location.getX());
        getConfig().set(zone + ".y", location.getY());
        getConfig().set(zone + ".z", location.getZ());
        getConfig().set(zone + ".yaw", location.getYaw());
        getConfig().set(zone + ".pitch", location.getPitch());
    }

    private Location zoneControl(String zone) {
        String zoneUpperCase = zone.toUpperCase();
        return new Location(Bukkit.getWorld(getConfig().getString(zoneUpperCase+".world")), getConfig().getDouble(zoneUpperCase+".x"), getConfig().getDouble(zoneUpperCase+".y"), getConfig().getDouble(zoneUpperCase+".z"),
                (float) getConfig().getDouble(zoneUpperCase+".yaw"), (float) getConfig().getDouble(zoneUpperCase+".pitch"));
    }
}
[Immagine: bZvpSjW.png]  

26/05/2017, 10:51Niketion ha scritto: In skript:
Codice:
command /setlocation <text>:
  trigger:
    player has permission "permesso.staff"
    if arg-1 is "hacker":
      set {hackloc} to player's location
    else if arg-1 is "staffer":
      set {staffer} to player's location
    else if arg-1 is "end":
      set {endloc} to player's location

command /control <player>:
  trigger:
    player has permission "permesso.staff"
    set {control.%arg-1%} to arg-1
    teleport arg-1 to {hackloc}
    teleport player to {staffer}
    send "&4Sei sotto controllo da parte di %player%" to arg-1


command /finish <player>:
  trigger:
    player has permission "permesso.staff"
    delete {control.%arg-1%}
    teleport arg-1 to {endloc}
  
    
on command:
  if {control.%player%} is set:
    cancel the event

on quit:
  if {control.%player%} is set:
    loop all players:
      loop-player has permission "permesso.staff"
      send "%player% è uscito da un controllo hack" to loop-player


In java:
Codice:
package it.nik.hackcontrol;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.ArrayList;

public class Main extends JavaPlugin implements CommandExecutor, Listener {

    private ArrayList<String> playerInControl = new ArrayList<>();

    @Override
    public void onEnable() {
        getCommand("setlocation").setExecutor(this);
        getCommand("control").setExecutor(this);
        getCommand("finish").setExecutor(this);

        getServer().getPluginManager().registerEvents(this, this);

        saveDefaultConfig();
    }

    @Override
    public boolean onCommand(CommandSender commandSender, Command command, String label, String[] strings) {
        if (!commandSender.hasPermission("permesso.staff"))
            return false;

        if (command.getName().equalsIgnoreCase("setlocation")) {
            Player player = (Player) commandSender;
            if (strings.length > 0) {
                String zone = strings[0].toUpperCase();
                Location location = player.getLocation();

                if (strings[0].equalsIgnoreCase("hacker")) {
                    setLocation(location, zone);
                } else if (strings[0].equalsIgnoreCase("staffer")) {
                    setLocation(location, zone);
                } else if (strings[0].equalsIgnoreCase("end")) {
                    setLocation(location, zone);
                } else {
                    return false;
                }

                player.sendMessage(ChatColor.GREEN + "Zona " + strings[0].toUpperCase() + " impostata.");
                return true;
            } else {
                return false;
            }
        } else if (command.getName().equalsIgnoreCase("control")) {
            Player player = (Player) commandSender;
            if (strings.length > 0)
                return false;

            try {
                if (getServer().getPlayer(strings[0]) != null) {
                    Player target = getServer().getPlayerExact(strings[0]);

                    playerInControl.add(strings[0]);
                    target.sendMessage(ChatColor.RED + "Sei sotto controllo da parte di " + player.getName());

                    target.teleport(zoneControl("hacker"));
                    player.teleport(zoneControl("staffer"));
                    return true;
                }
            } catch (NullPointerException exception) {
                Bukkit.getOnlinePlayers().stream().filter(players -> players.hasPermission("permesso.staff")).forEach(players -> players.sendMessage("Qualche zona (hacker/staffer/end) non è stata impostata correttamente."));
            }
        } else if (command.getName().equalsIgnoreCase("finish")) {
            if (!(strings.length > 0))
                return false;

            if (playerInControl.contains(strings[0])) {
                playerInControl.remove(strings[0]);

                Player target = getServer().getPlayerExact(strings[0]);

                target.teleport(zoneControl("end"));
                target.sendMessage(ChatColor.YELLOW + "Controllo terminato.");
            }
        }
        return false;
    }

    @EventHandler
    public void onPlayerQuit(PlayerQuitEvent event) {
        if (playerInControl.contains(event.getPlayer().getName()))
            for (Player players : getServer().getOnlinePlayers())
                players.sendMessage(ChatColor.RED + event.getPlayer().getName() + " è uscito da un controllo hack");
    }

    @EventHandler(priority = EventPriority.HIGHEST)
    public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
        if (playerInControl.contains(event.getPlayer().getName()))
            event.setCancelled(true);
    }

    private void setLocation(Location location, String zone) {
        getConfig().set(zone + ".world", location.getWorld().getName());
        getConfig().set(zone + ".x", location.getX());
        getConfig().set(zone + ".y", location.getY());
        getConfig().set(zone + ".z", location.getZ());
        getConfig().set(zone + ".yaw", location.getYaw());
        getConfig().set(zone + ".pitch", location.getPitch());
    }

    private Location zoneControl(String zone) {
        String zoneUpperCase = zone.toUpperCase();
        return new Location(Bukkit.getWorld(getConfig().getString(zoneUpperCase+".world")), getConfig().getDouble(zoneUpperCase+".x"), getConfig().getDouble(zoneUpperCase+".y"), getConfig().getDouble(zoneUpperCase+".z"),
                (float) getConfig().getDouble(zoneUpperCase+".yaw"), (float) getConfig().getDouble(zoneUpperCase+".pitch"));
    }
}

Penso che per impararmi bene java dovrò studiare almeno 1 anno per adesso siccome so usare skript, faccio skript poi quando ne sarò in grado farò direttamente plugins.
SynesthesiaMC in arrivo!


Se ti sono stato utile clicca su +1  Riot
Discussioni simili
 
[Release] Chat++ [Skript]
5 522
Risposta di Sk3py
14/12/2018, 23:03
Risposta di astRiKez14
06/12/2018, 00:24
Risposta di Sk3py
03/12/2018, 23:39
 
[Domanda] Skript
2 147
Risposta di Cyrd_
09/09/2018, 18:50
Risposta di ReNext
05/05/2018, 16:57

Utente(i) che stanno guardando questa discussione: 1 Ospite(i)