Advertisement
DayDun

[CoasterTown] Calculator

Jan 13th, 2019
5,463
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. def broadcast(message) {
  2.     for (var i=0; i<CountPlayers(); ++i) {
  3.         var player = GetPlayerAtIndex(i);
  4.         ConsoleMessage(player, message);
  5.     }
  6. }
  7.  
  8. def OnPlayerChat(player, input) {
  9.     var tokens = [];
  10.     var token = "";
  11.    
  12.     for (var i=0; i<input.size(); ++i) {
  13.         var char = input[i];
  14.         if (char == ' ') {
  15.             continue;
  16.         }
  17.        
  18.         if (char >= '0' && char <= '9') {
  19.             token.push_back(char);
  20.         } else if (char == '.' || char == ',') {
  21.             if (token.find(".") == -1) {
  22.                 token.push_back('.');
  23.             } else {
  24.                 return;
  25.             }
  26.         } else if (char == '+' || char == '-' || char == '*' || char == '/' || char == '(' || char == ')') {
  27.             tokens.push_back(token);
  28.             token = "";
  29.             tokens.push_back(char);
  30.         } else {
  31.             return;
  32.         }
  33.     }
  34.     tokens.push_back(token);
  35.    
  36.     var queue = [];
  37.     var stack = [];
  38.     for (var i=0; i<tokens.size(); ++i) {
  39.         var t = tokens[i];
  40.        
  41.         if (type_name(t) == "string") {
  42.             if (t == "") {
  43.                 continue;
  44.             }
  45.             queue.push_back(to_float(t));
  46.         } else if (t == '+' || t == '-') {
  47.             while(!stack.empty()) {
  48.                 var a = stack.back();
  49.                 if (a == '(') {
  50.                     break;
  51.                 }
  52.                 stack.pop_back();
  53.                 queue.push_back(a);
  54.             }
  55.             stack.push_back(t);
  56.         } else if (t == '*' || t == '/') {
  57.             while(!stack.empty()) {
  58.                 var a = stack.back();
  59.                 if (a == '+' || a == '-' || a == '(') {
  60.                     break;
  61.                 }
  62.                 stack.pop_back();
  63.                 queue.push_back(a);
  64.             }
  65.             stack.push_back(t);
  66.         } else if (t == '(') {
  67.             stack.push_back(t);
  68.         } else if (t == ')') {
  69.             while(true) {
  70.                 var a = stack.back();
  71.                 stack.pop_back();
  72.                 if (a == '(' || stack.empty()) {
  73.                     break;
  74.                 }
  75.                 queue.push_back(a);
  76.             }
  77.         }
  78.     }
  79.     while(!stack.empty()) {
  80.         queue.push_back(stack.back());
  81.         stack.pop_back();
  82.     }
  83.    
  84.     if (queue.size() == 1) {
  85.         return;
  86.     }
  87.    
  88.     var stack2 = [];
  89.    
  90.     for (var i=0; i<queue.size(); ++i) {
  91.         var a = queue[i];
  92.        
  93.         if (type_name(a) == "float") {
  94.             stack2.push_back(a);
  95.             continue;
  96.         }
  97.        
  98.         if (stack2.size() < 2) {
  99.             return;
  100.         }
  101.        
  102.         var y = stack2.back();
  103.         stack2.pop_back();
  104.         var x = stack2.back();
  105.         stack2.pop_back();
  106.        
  107.         if (a == '+') {
  108.             stack2.push_back(x + y);
  109.         } else if (a == '-') {
  110.             stack2.push_back(x - y);
  111.         } else if (a == '*') {
  112.             stack2.push_back(x * y);
  113.         } else if (a == '/') {
  114.             stack2.push_back(x / y);
  115.         }
  116.     }
  117.    
  118.     if (stack2.size() != 1) {
  119.         return;
  120.     }
  121.    
  122.     broadcast("^6${stack2[0]}");
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement