· 10 years ago · Aug 10, 2016, 12:53 PM
1#------ VERSION 0.9 ------#
2
3options:
4 # IP Base de données
5 IpBDD: ****
6
7 # Nom de la base de données
8 NomBDD: ****
9
10 # Identifiant base de données
11 IdBDD: ****
12
13 # Mot de passe base de données
14 MdpBDD: ****
15
16 # Au bout de combien de jour l'offres est supprimées
17 DaysSupr: 3
18
19
20 # Nom du GUI listant les offres (/hde) | [page] = numéro de la page des offres
21 NomMenuHDE: "Hôtel des échanges (Page [page])"
22
23 # Lorsque le joueur clique sur "vendre"
24 VendreMenu: "&aPour vendre prenez ce que vous voulez vendre en main puis faites /vendre"
25
26 # Lorsqu'un joueur essaye d'échanger avec rien dans la main
27 NoItemEchange: "&cVous n'avez pas d'objet dans votre main à échanger !"
28
29 # Lorsque le joueur doit choisir l'item en échange du sien
30 ChooseItemEchange: "&aMaintenant l'item contre lequel vous voulez échanger en le mettant dans votre main et en refaisant /vendre, vous pourrez ensuite sélectionner le nombre."
31
32 # Lorsque le joueur à pris trop de temps pour choisir l'item d'échange
33 AnnuleItemEchange: "&cEchange annulé, pour cause d'attente trop longue pour choisir l'item d'échange, recommencez avec /vendre."
34
35 # Lorsqu'un joueur essaye de mettre le prix mais qu'il n'a rien dans la main
36 NoItemPrix: "&cVous n'avez pas d'objet dans votre main pour mettre le prix, refaites /vendre !"
37
38 # Lorsque le joueur annule l'échange après avoir mis le prix
39 AnnuleEchangePrix: "&cVous avez annulé la mise en échange, /vendre pour recommencer."
40
41 # Lorsque l'objet est mis en échange
42 MisEnEchange: "&aVotre item à bien été mis en échange, vous serez payez si l'on vous l'achète sinon il vous sera rendu dans un certain nombre de jours et l'offre sera supprimée."
43
44 # Lorsqu'il faut choisir le nombre d'item prix
45 NombreItemPrix: "&cRentrez dans chat le nombre d'item que voulez mettre comme prix ou entrez STOP pour arrêter:"
46
47 # Lorsque le joueur entre STOP quand on demande le nombre
48 StopChat: "Vous avez annulé l'échange, vous reparlez dans le chat normalement."
49
50 # Impossible de mettre moins de 1 pour choisir le prix
51 MoinsUnItemPrix: "&cVous ne pouvez pas mettre comme prix moins de 1 item !"
52
53 # Message rentré pas un nombre lors de la sélection du prix | [message] prix rentré par le joueur
54 PasNombre: "&c&o[message] &r&cn'est pas un nombre."
55
56 # Lors de la mise en échange si le joueur ne possède plus l'item dans son inventaire
57 NoItemInv: "&cVous n'avez plus l'item à mettre en échange dans votre inventaire ! L'échange est annulé, recommencez avec /vendre"
58
59 # Pas suffisamment d'items pour acheter | [prix] correspond au prix de l'offre que le joueur a essayé d'acheter
60 NoSuffItems: "&cVous ne possédez pas suffisamment d'item pour acheter cette offre, recommencez avec /hde. Il vous fallait: &o[prix]"
61
62 # Lorsque l'échange s'est réalisé
63 SuccEchange: "&aFélicitations ! Votre échange s'est déroulé avec succès !"
64
65 # Demande de confirmation pour /hdeclear
66 ConfirmHdeClear: "&cÊtes vous sur de vouloir supprimer toutes les offres et de reset les ID ? Si oui, refaites /hdeclear"
67
68 # Lorsque la commande /hdeclear a clear la BDD
69 HdeCleared: "&aLa base de données stockant les offres a été vidée, il n'y a donc plus d'offres, les ID ont été reset."
70
71 # Délai d'attente dépassé pour la confirmation de /hdeclear
72 DelayHdeClear: "&cSuppression annulée pour trop d'attente."
73
74 # Lorsqu'une offre à été vendu le vendeur est prévenu et gagne le rapport de la vente | [offre] = item offre / [rapport] = objets rapportés / [acheteur] = acheteur de l'offre
75 OffreVendue: "&aVotre offre: &o[offre] &aa été vendue à &o[acheteur] &acontre &o[rapport]"
76
77 # Une offre est mise pour un certain temps en vente, quand ce temps est dépassé elle est supprimée | [offre] = item offre / [delay] = la limite en nombre de jours
78 OffreTriee: "&cVotre offre: &o[offre] &ca été mise en vente il y a plus de &o[delay] &cjour(s), elle a été supprimée, l'objet mis en vente vous a été rendu."
79
80
81
82
83script options:
84 $ init com.mysql.jdbc.Driver
85 $ db url jdbc:mysql://{@IpBDD}:3306/{@NomBDD}
86 $ db username {@IdBDD}
87 $ db password {@MdpBDD}
88
89
90on skript enable:
91 add objects in column "pseudo_vendeur" from result of query "SELECT pseudo_vendeur FROM ventes_hde" and close to {_vendeurs::*}
92 update "CREATE TABLE IF NOT EXISTS offres_hde (id int(11) NOT NULL AUTO_INCREMENT, pseudo_vendeur varchar(32) NOT NULL, miseenechange date NOT NULL, item_vente text NOT NULL, echange_item text NOT NULL, echange_id string NOT NULL, echange_nombre int(11) NOT NULL, echange_enchantements text NOT NULL, primary key (id)) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;"
93 update "CREATE TABLE IF NOT EXISTS ventes_hde (id int(11) NOT NULL AUTO_INCREMENT, datevendu datetime NOT NULL, id_offre int(11) NOT NULL, pseudo_vendeur varchar(32) NOT NULL, pseudo_acheteur varchar(32) NOT NULL, item_rendre text NOT NULL, item_vendu text NOT NULL, primary key (id)) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;"
94 loop {_vendeurs::*}:
95 if {rendreVendeurs::*} contains "%loop-value%":
96 exit
97 else:
98 add "%loop-value%" to {rendreVendeurs::*}
99
100
101function dayTri(t: integer) :: integer:
102 add objects in column "id" from result of query "SELECT id FROM offres_hde" and close to {_id::*}
103 add objects in column "jour" from result of query "SELECT DAY(miseenechange) AS jour FROM offres_hde" and close to {_datesD::*}
104 add objects in column "mois" from result of query "SELECT MONTH(miseenechange) AS mois FROM offres_hde" and close to {_datesM::*}
105 add objects in column "annee" from result of query "SELECT YEAR(miseenechange) AS annee FROM offres_hde" and close to {_datesY::*}
106 add objects in column "pseudo_vendeur" from result of query "SELECT pseudo_vendeur FROM offres_hde" and close to {_vendeur::*}
107 add objects in column "item_vente" from result of query "SELECT item_vente FROM offres_hde" and close to {_itemV::*}
108 set {_now} to "%now%"
109 set {_nombreDel} to 0
110 set {_split::*} to {_now} split at "/"
111 set {_split::1} to {_split::1} parsed as integer
112 set {_split::2} to {_split::2} parsed as integer
113 set {_split2::*} to {_split::3} split at " "
114 set {_split2::1} to {_split2::1} parsed as integer
115 set {_now} to {_split::1}+{_split::2}+2000+{_split2::1}
116 set {_count} to 1
117 loop size of {_id::*} times:
118 set {_datesM::%{_count}%} to "%{_datesM::%{_count}%}%" parsed as integer
119 set {_datesD::%{_count}%} to "%{_datesD::%{_count}%}%" parsed as integer
120 set {_datesY::%{_count}%} to "%{_datesY::%{_count}%}%" parsed as integer
121 set {_miseenechange} to {_datesM::%{_count}%}+{_datesD::%{_count}%}+{_datesY::%{_count}%}
122 if {_now}-{_miseenechange} >= {_t}:
123 update "DELETE FROM offres_hde WHERE id = '%{_id::%{_count}%}%'"
124 set {_vendeur} to "%{_vendeur::%{_count}%}%" parsed as player
125 set {_itemV} to "%{_itemV::%{_count}%}%" parsed as item type
126 if "%{_vendeur}%" is "<none>":
127 update "INSERT INTO ventes_hde (datevendu, id_offre, pseudo_vendeur, pseudo_acheteur, item_rendre, item_vendu) VALUES (NOW(), '%{_id::%{_count}%}%', '%{_vendeur::%{_count}%}%', '%{_t}%', '%{_itemV}%', 'DELAY REMOVED') ;"
128 if "%{rendreVendeurs::*}%" doesn't contain "%{_vendeur::%{_count}%}%":
129 add "%{_vendeur::%{_count}%}%" to {rendreVendeurs::*}
130 else:
131 set {_OffreTriee} to {@OffreTriee}
132 replace all "[offre]" in {_OffreTriee} with "%{_itemV}%"
133 replace all "[delay]" in {_OffreTriee} with "%{_t}%"
134 send {_OffreTriee} to {_vendeur}
135 give {_itemV} to {_vendeur}
136 add 1 to {_nombreDel}
137 add 1 to {_count}
138 set {_nombreDel} to "%{_nombreDel}%" parsed as integer
139 return {_nombreDel}
140
141
142function annuler(pla: player, msg: text):
143 delete {echange.%{_pla}%::*}
144 delete {echangeItem.%{_pla}%}
145 delete {echangeGui.%{_pla}%}
146 delete {echangeNumbPrix.%{_pla}%}
147 send {_msg} to {_pla}
148
149
150function actuHde(t: integer):
151 wait 3 tick
152 loop all players:
153 if "%inventory name of current inventory of loop-player%" is {@NomMenuHDE}:
154 close loop-player's inventory
155 wait 1 tick
156 make loop-player execute command "/hde"
157
158
159function miseEnEchange(pla: player):
160 if number of {echange.%{_pla}%::itemV} in {_pla}'s inventory < {echange.%{_pla}%::numbV}:
161 annuler({_pla}, {@NoItemInv})
162 stop
163 remove {echange.%{_pla}%::itemV} from {_pla}'s inventory
164 update "INSERT INTO offres_hde (pseudo_vendeur, miseenechange, item_vente, echange_item, echange_id, echange_nombre, echange_enchantements) VALUES ('%{_pla}%', NOW(), '%{echange.%{_pla}%::itemV}%', '%{echange.%{_pla}%::itemP}%', '%{echange.%{_pla}%::idP}%', '%{echange.%{_pla}%::numbP}%', '%{echange.%{_pla}%::enchantementsP}%') ;"
165 annuler({_pla}, {@MisEnEchange})
166
167
168every day:
169 dayTri({@DaysSupr})
170
171
172command /pchde <player> <integer>:
173 executable by: console
174 trigger:
175 wait 2 tick
176 make arg 1 execute "hde %arg 2%"
177
178command /cIthde <player> <integer>:
179 executable by: console
180 trigger:
181 set {_itemP} to the first element out of objects in column "echange_item" from result of query "SELECT echange_item FROM offres_hde WHERE id = '%arg 2%'" and close
182 set {_vendeur} to the first element out of objects in column "pseudo_vendeur" from result of query "SELECT pseudo_vendeur FROM offres_hde WHERE id = '%arg 2%'" and close
183 set {_vendeurP} to "%{_vendeur}%" parsed as player
184 set {_itemPi} to "%{_itemP}%" parsed as item type
185 set {_numbP} to the first element out of objects in column "echange_nombre" from result of query "SELECT echange_nombre FROM offres_hde WHERE id = '%arg 2%'" and close parsed as integer
186 set {_itemV} to the first element out of objects in column "item_vente" from result of query "SELECT item_vente FROM offres_hde WHERE id = '%arg 2%'" and close
187 set {_itemVi} to "%{_itemV}%" parsed as item type
188 if number of {_itemPi} in arg 1's inventory < {_numbP}:
189 set {_msgAnnul} to {@NoSuffItems}
190 replace all "[prix]" in {_msgAnnul} with {_itemP}
191 annuler(arg 1, {_msgAnnul})
192 stop
193 remove {_itemPi} from arg 1's inventory
194 give {_itemVi} to arg 1
195 annuler(arg 1, {@SuccEchange})
196 update "DELETE FROM offres_hde WHERE id = '%arg 2%'"
197 actuHde(1)
198 if "%{_vendeurP}%" is "<none>":
199 update "INSERT INTO ventes_hde (datevendu, id_offre, pseudo_vendeur, pseudo_acheteur, item_rendre, item_vendu) VALUES (NOW(), '%arg 2%', '%{_vendeur}%', '%arg 1%', '%{_itemPi}%', '%{_itemVi}%') ;"
200 if "%{rendreVendeurs::*}%" doesn't contain "%{_vendeur}%":
201 add "%{_vendeur}%" to {rendreVendeurs::*}
202 stop
203 else:
204 set {_OffreVendue} to {@OffreVendue}
205 replace all "[offre]" in {_OffreVendue} with "%{_itemV}%"
206 replace all "[rapport]" in {_OffreVendue} with "%{_itemP}%"
207 replace all "[acheteur]" in {_OffreVendue} with "%arg 1%"
208 send {_OffreVendue} to {_vendeurP}
209 give {_itemPi} to {_vendeurP}
210
211
212command /annulhde <integer>:
213 usage: /annulhde [<jours tri>]
214 executable by: player
215 trigger:
216 if arg 1 < 1:
217 send "&cVous ne pouvez pas retirer les offres datant de moins de 1 jour !"
218 stop
219 set {_offresSupr} to dayTri(arg 1)
220 send "&a%{_offresSupr}% offres dataient de plus de &o%arg 1% &ajour(s), elles ont été retirées et le stuff rendu à leur vendeur"
221
222
223command /hde [<integer=1>]:
224 usage: /hde [<page>]
225 executable by: player
226 trigger:
227 add objects in column "id" from result of query "SELECT id FROM offres_hde" and close to {_countOffres::*}
228 add objects in column "id" from result of query "SELECT id FROM offres_hde LIMIT %45*(arg 1-1)%,45" and close to {_ID::*}
229 add objects in column "pseudo_vendeur" from result of query "SELECT pseudo_vendeur FROM offres_hde LIMIT %45*(arg 1-1)%,45" and close to {_vendeur::*}
230 add objects in column "item_vente" from result of query "SELECT item_vente FROM offres_hde LIMIT %45*(arg 1-1)%,45" and close to {_itemV::*}
231 add objects in column "echange_item" from result of query "SELECT echange_item FROM offres_hde LIMIT %45*(arg 1-1)%,45" and close to {_itemP::*}
232 add objects in column "echange_id" from result of query "SELECT echange_id FROM offres_hde LIMIT %45*(arg 1-1)%,45" and close to {_idP::*}
233 add objects in column "echange_nombre" from result of query "SELECT echange_nombre FROM offres_hde LIMIT %45*(arg 1-1)%,45" and close to {_numbP::*}
234 add objects in column "echange_enchantements" from result of query "SELECT echange_enchantements FROM offres_hde LIMIT %45*(arg 1-1)%,45" and close to {_enchantP::*}
235 set {_NomMenuHDE} to {@NomMenuHDE}
236 replace all "[page]" in {_NomMenuHDE} with "%arg 1%"
237 send "&cIl se peut que des problèmes arrivent lors d'achat ! L'HDE est en Beta Test ! Nous ne serez pas remboursé ! Bug connu: un item non enchanté comme prix pourra prendre un item enchanté" #BETA TEST
238 wait 2 seconds #BETA TEST
239 wait 1 tick
240 open chest with 6 rows named {_NomMenuHDE} to player
241 format slot 48 of player with egg named "&bVendre" to close then run [send {@VendreMenu}]
242 format slot 50 of player with stick named "&r%size of {_countOffres::*}% offres en ventes actuellement" to be unstealable
243 if arg 1 > 1:
244 format slot 45 of player with (arg 1)-1 of arrows named "&rPage &a%arg 1-1%" to close then run "pchde %player% %(arg 1)-1%"
245 if size of {_ID::*} >= 45:
246 format slot 53 of player with (arg 1)+1 of arrows named "&rPage &a%arg 1+1%" to close then run "pchde %player% %(arg 1)+1%"
247 set {_count} to 0
248 set {_count1} to 1
249 loop 45 times:
250 if {_itemV::%{_count1}%} is not set:
251 stop
252 set {_itemV} to "%{_itemV::%{_count1}%}%" parsed as item type
253 set {_itemP} to "%{_idP::%{_count1}%}%" parsed as item type
254 if {_enchantP::%{_count1}%} is "NULL":
255 set {_enchantsP} to ""
256 else:
257 replace all "/" in {_enchantP::%{_count1}%} with "||&7"
258 set {_enchantsP} to " &7echanté(e)(s)||&7%{_enchantP::%{_count1}%}%"
259 format slot {_count} of player with {_itemV} with lore "||&eVendu par: &7%{_vendeur::%{_count1}%}%||&eContre: &7%{_numbP::%{_count1}%}% %{_itemP}%%{_enchantsP}%||&8&o##%{_ID::%{_count1}%}%" to close then run "cIthde %player% %{_ID::%{_count1}%}%"
260 add 1 to {_count}
261 add 1 to {_count1}
262
263
264command /vendre:
265 executable by: player
266 trigger:
267 if {echangeItem.%player%} is set:
268 delete {echangeItem.%player%}
269 if "%player's tool%" is "air":
270 message {@NoItemEchange}
271 stop
272 set {echange.%player%::itemP} to player's tool
273 set {echange.%player%::idP} to "%id of player's tool%:%data value of player's tool%"
274 send "%id of player's tool%:%data value of player's tool%"
275 if "%player's tool%" contains "enchanted":
276 set {_itemEnchantements::*} to groups 1 of "%player's tool%" matched to "of (.*) named"
277 else:
278 set {_itemEnchantements::*} to groups 1 of "%player's tool%" matched to "of (.*)"
279 replace all "," in {_itemEnchantements::1} with " "
280 replace all "and" in {_itemEnchantements::1} with ""
281 replace all " " in {_itemEnchantements::1} with "/"
282 if {_itemEnchantements::1} is not set:
283 set {_itemEnchantements::1} to "NULL"
284 set {echange.%player%::enchantementsP} to {_itemEnchantements::1}
285 set {echangeNumbPrix.%player%} to "%{echange.%player%::idP}%" parsed as item type
286 message {@NombreItemPrix}
287 set {_decount} to 0
288 while {echange.%player%::numbP} is not set:
289 wait 0.5 seconds
290 add 1 to {_decount}
291 if {_decount} == 15:
292 annuler(player, {@AnnuleItemEchange})
293 stop
294 set {_echangeitemV} to "%{echange.%player%::itemV}%" parsed as item type
295 set {_echangeidP} to "%{echange.%player%::idP}%" parsed as item type
296 set {echange.%player%::itemP} to {echange.%player%::itemP} parsed as item type
297 set {echangeGui.%player%} to true
298 wait 1 tick
299 open chest with 1 row named "Confirmer" to player
300 format slot 0 of player with light green glass named "&aConfirmer et mettre en échange" to close then run [miseEnEchange(player)]
301 format slot 3 of player with {echange.%player%::itemV} with lore "||&aItem mis en échange" to be unstealable
302 format slot 5 of player with {echange.%player%::numbP} of {echange.%player%::itemP} with lore "||&aPrix en échange||||x%{echange.%player%::numbP}% %{_echangeidP}%" to be unstealable
303 format slot 8 of player with red stained glass named "&cTout annuler" to close then run [annuler(player, {@AnnuleEchangePrix})]
304
305 else:
306 send "&cL'HDE est en Beta Test ! Un item perdu ne sera pas remboursé ! Vous êtes prévenu ! (Rapportez les bugs !)" #BETA TEST
307 wait 2 seconds #BETA TEST
308 if "%player's tool%" is "air":
309 message {@NoItemEchange}
310 stop
311 set {echange.%player%::itemV} to player's tool
312 send {@ChooseItemEchange}
313 set {echangeItem.%player%} to false
314 wait 15 seconds
315 if {echangeItem.%player%} is set:
316 annuler(player, {@AnnuleItemEchange})
317 stop
318
319
320command /hdeclear:
321 description: &cUne commande pour vider tout l'HDE actuel et reset les ID
322 permission: hde.admin.clear
323 trigger:
324 if {hdeclear.%player%} is true:
325 update "TRUNCATE offres_hde"
326 send {@HdeCleared}
327 delete {hdeclear.%player%}
328 else:
329 send {@ConfirmHdeClear}
330 set {hdeclear.%player%} to true
331 wait 5 seconds
332 if {hdeclear.%player%} is set:
333 send {@DelayHdeClear}
334 delete {hdeclear.%player%}
335
336
337on quit:
338 annuler(player, {@StopChat})
339
340
341on chat:
342 if {echangeNumbPrix.%player%} is set:
343 cancel event
344 send "&o%message%" to player
345 set {_test} to message parsed as number
346 set {_nombreprix} to {@NombreItemPrix}
347 set {_notnumber} to {@PasNombre}
348 replace all "[message]" in {_notnumber} with "%message%"
349 if {_test} is a number:
350 if {_test} > 0:
351 delete {echangeNumbPrix.%player%}
352 set {echange.%player%::itemP} to "%{echange.%player%::itemP}%"
353 set {_eE::*} to {echange.%player%::itemP} split at " "
354 set {_count} to {_eE::1} parsed as integer
355 if "%{_count}%" is "<none>":
356 set {echange.%player%::itemP} to "%{_test}% %{echange.%player%::itemP}%"
357 else:
358 replace all "%{_count}%" in {echange.%player%::itemP} with "%{_test}%"
359 set {echange.%player%::numbP} to {_test}
360 else:
361 send {@MoinsUnItemPrix}
362 send {_nombreprix}
363 else if message is "stop":
364 annuler(player, {@StopChat})
365 else:
366 send {_notnumber}
367 send {_nombreprix}
368
369
370on join:
371 if "%{rendreVendeurs::*}%" contains "%player%":
372 add objects in column "item_rendre" from result of query "SELECT item_rendre FROM ventes_hde WHERE pseudo_vendeur = '%player%'" and close to {_rapporteVentes::*}
373 add objects in column "pseudo_acheteur" from result of query "SELECT pseudo_acheteur FROM ventes_hde WHERE pseudo_vendeur = '%player%'" and close to {_acheteurs::*}
374 add objects in column "item_vendu" from result of query "SELECT item_vendu FROM ventes_hde WHERE pseudo_vendeur = '%player%'" and close to {_itemsVendus::*}
375 set {_count} to 1
376 loop size of {_rapporteVentes::*} times:
377 if "%{_itemsVendus::%{_count}%}%" is "DELAY REMOVED":
378 set {_OffreTriee} to {@OffreTriee}
379 replace all "[offre]" in {_OffreTriee} with "%{_rapporteVentes::%{_count}%}%"
380 replace all "[delay]" in {_OffreTriee} with "%{_acheteurs::%{_count}%}%"
381 send {_OffreTriee} to player
382 else:
383 set {_OffreVendue} to {@OffreVendue}
384 replace all "[offre]" in {_OffreVendue} with "%{_itemsVendus::%{_count}%}%"
385 replace all "[rapport]" in {_OffreVendue} with "%{_rapporteVentes::%{_count}%}%"
386 replace all "[acheteur]" in {_OffreVendue} with "%{_acheteurs::%{_count}%}%"
387 send {_OffreVendue}
388 set {_rapporteVentes::%{_count}%} to "%{_rapporteVentes::%{_count}%}%" parsed as item type
389 give {_rapporteVentes::%{_count}%} to player
390 add 1 to {_count}
391 update "DELETE FROM ventes_hde WHERE pseudo_vendeur = '%player%'"
392 remove "%player%" from {rendreVendeurs::*}
393
394
395
396on command:
397 if {echangeNumbPrix.%player%} is set:
398 cancel event
399 send "&o/%command%" to player
400 set {_notnumber} to {@PasNombre}
401 replace all "[message]" in {_notnumber} with "/%command%"
402 send {_notnumber}
403 send {@NombreItemPrix}
404
405
406on skript enable:
407 dayTri({@DaysSupr})
408
409
410on inventory click:
411 if "%inventory name of current inventory of player%" is {@NomMenuHDE}:
412 cancel event
413 else if "%inventory name of current inventory of player%" is "Confirmer":
414 cancel event
415
416
417on inventory close:
418 if "%inventory name of current inventory of player%" is "Confirmer":
419 if {echangeGui.%player%} is set:
420 annuler(player, {@AnnuleEchangePrix})