add drops
This commit is contained in:
32
drops.lisp
Normal file
32
drops.lisp
Normal file
@@ -0,0 +1,32 @@
|
||||
(in-package :lispostory)
|
||||
|
||||
(defparameter *chronostory-drops-sheet-url* "https://docs.google.com/spreadsheets/d/e/2PACX-1vRpKuZGJQIFFxSi6kzYx4ALI0MQborpLEkh3J1qIGSd0Bw7U4NYg5CK-3ESzyK580z4D8NO59SUeC3k/pub?gid=1888753114&single=true&output=csv")
|
||||
|
||||
(defparameter *chronostory-drops* nil)
|
||||
|
||||
(defun refresh-drops ()
|
||||
(let* ((data (drakma:http-request *chronostory-drops-sheet-url*))
|
||||
(csv (cl-csv:read-csv data))
|
||||
(header (car csv))
|
||||
(num-fields-to-keep (position "" header :test #'equal))
|
||||
(keys (mapcar #'string-to-hash-table-key (subseq header 0 num-fields-to-keep)))
|
||||
(drops (map 'vector
|
||||
(lambda (row)
|
||||
(serapeum:pairhash keys (subseq row 0 num-fields-to-keep)))
|
||||
(cdr csv))))
|
||||
(setf *chronostory-drops* drops)
|
||||
(alexandria-2:write-string-into-file
|
||||
(shasht:write-json drops nil)
|
||||
"drops.json"
|
||||
:if-exists :overwrite
|
||||
:if-does-not-exist :create)))
|
||||
|
||||
(defun reload-drops ()
|
||||
(let ((drops (shasht:read-json (uiop:read-file-string "drops.json"))))
|
||||
(setf *chronostory-drops* drops)
|
||||
drops))
|
||||
|
||||
(defun load-drops ()
|
||||
(if *chronostory-drops*
|
||||
*chronostory-drops*
|
||||
(reload-drops)))
|
||||
@@ -9,4 +9,5 @@
|
||||
(:file "main" :depends-on ("utils"))
|
||||
(:file "mobs" :depends-on ("utils"))
|
||||
(:file "items" :depends-on ("utils"))
|
||||
(:file "spawns" :depends-on ("utils"))))
|
||||
(:file "spawns" :depends-on ("utils"))
|
||||
(:file "drops" :depends-on ("utils"))))
|
||||
|
||||
@@ -3,6 +3,5 @@
|
||||
(defparameter *chronostory-map-url-format* "https://chronostory.onrender.com/api/map-info?mapId=~a")
|
||||
(defparameter *chronostory-gacha-search-format* "https://chronostory.onrender.com/api/gacha-search?itemId=~a")
|
||||
(defparameter *chronostory-gacha-url-format "https://chronostory.onrender.com/api/gacha-items?gachaId=~a")
|
||||
(defparameter *chronostory-drops-sheet-url* "https://docs.google.com/spreadsheets/d/e/2PACX-1vRpKuZGJQIFFxSi6kzYx4ALI0MQborpLEkh3J1qIGSd0Bw7U4NYg5CK-3ESzyK580z4D8NO59SUeC3k/pub?gid=1888753114&single=true&output=csv")
|
||||
|
||||
; (sb-ext:save-lisp-and-die "my-prog" :toplevel #'show-mobs :executable t)
|
||||
|
||||
@@ -56,9 +56,7 @@ separate csvs."
|
||||
(parse-error () nil)))
|
||||
|
||||
(defun csv-to-hash-tables (csv)
|
||||
(let* ((keys (mapcar (lambda (k)
|
||||
(let ((k2 (string-upcase (serapeum:string-replace " " k ""))))
|
||||
(intern k2 :keyword)))
|
||||
(let* ((keys (mapcar #'string-to-hash-table-key
|
||||
(car csv)))
|
||||
(result (make-array 0 :adjustable t :fill-pointer 0)))
|
||||
(loop for row in csv
|
||||
|
||||
@@ -16,3 +16,7 @@
|
||||
|
||||
(defun map-vector (func vec)
|
||||
(map 'vector func vec))
|
||||
|
||||
(defun string-to-hash-table-key (s)
|
||||
(let ((k2 (string-upcase (serapeum:string-replace " " s ""))))
|
||||
(intern k2 :keyword)))
|
||||
|
||||
Reference in New Issue
Block a user